首页 文章

使用Html.ActionLink在不同的控制器上调用操作

提问于
浏览
205

我正在尝试使用 ActionLink 在控制器之间导航 . 我将以一个例子告诉我的问题 .

我在Hat控制器的索引视图上,我正在尝试使用下面的代码创建一个指向Product控件的Details操作的链接 .

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }) %>

这不会创建指向Product控件上的Details的链接,而是在Hat控制器下生成一个指向Details操作的链接,并将Length参数附加到它的末尾:

Hat/Details/9?Length=7

由于此问题,我无法使用 HTML.ActionLink 在控制器之间切换 . 如果你能指出我做错了什么,我将不胜感激 . 谢谢

PS:我使用的是MVC附带的默认路由设置

routes.MapRoute("Default", "{controller}/{action}/{id}", 
                     new { controller = "Home", action = "Index", id = "" } );

8 回答

  • 16

    你想要的是这个重载:

    //linkText, actionName, controllerName, routeValues, htmlAttributes
    <%=Html.ActionLink("Details", "Details", 
        "Product", new {id = item.ID}, null) %>
    
  • 3

    使用该参数,您将触发错误的重载功能/方法 .

    什么对我有用:

    <%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }, null) %>
    

    它触发HtmlHelper.ActionLink(string linkText,string actionName,string controllerName,object routeValues,object htmlAttributes)

    我正在使用MVC 4 .

    Cheerio!

  • 0

    如果您获取MVC Futures程序集(我强烈推荐),您可以在创建ActionLink时使用泛型,并使用lambda来构造路径:

    <%=Html.ActionLink<Product>(c => c.Action( o.Value ), "Details" ) %>
    

    你可以在这里买到期货大会:http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

  • 376

    为了清楚起见,我建议使用命名参数编写这些助手,如下所示:

    @Html.ActionLink(
        linkText: "Details",
        actionName: "Details",
        controllerName: "Product",
        routeValues: new {
            id = item.ID
        },
        htmlAttributes: null
    )
    
  • 10

    你错了ActionLink的重载 . 试试这个 .

    <%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
    
  • 8

    试试它工作正常

    <%:Html.ActionLink("Details","Details","Product",  new {id=item.dateID },null)%>
    
  • 7

    另一种解决方案是使用 Url 辅助对象来设置 <a> 标签的 href 属性,如:

    <a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>
    
  • 5

    这段代码在局部视图中对我有用:

    <a href="/Content/Index?SubCategoryId=@item.Id">@item.Title</a>
    

相关问题