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

时间:2009-04-22 11:35:56

标签: asp.net-mvc

我正在尝试使用ActionLink在控制器之间导航。我会以一个例子来说明我的问题。

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

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

不是在Product Controller上创建一个指向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 = "" } );

9 个答案:

答案 0 :(得分:387)

你想要的是这个重载:

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

答案 1 :(得分:17)

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

对我有用的是什么:

<%= 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!

答案 2 :(得分:10)

如果你抓住MVC Futures集合(我强烈推荐)你可以在创建ActionLink时使用泛型,并使用lambda来构建路径:

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

您可以在此处获得期货汇编:http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

答案 3 :(得分:10)

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

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

答案 4 :(得分:7)

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

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

答案 5 :(得分:6)

尝试它工作正常

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

答案 6 :(得分:3)

另一种解决方案是使用href辅助对象设置<a>标记的<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a> 属性,如:

self.performSegueWithIdentifier("segue that goes back to login screen", sender: self)
PFUser.logOutInBackground()

答案 7 :(得分:2)

请注意,“详细信息”是“产品”文件夹下的“查看”页面。

ProductId是表的主键。这是Index.cshtml

中的行
 @Html.ActionLink("Details", "Details","Products" , new  {  id=item.ProductId  },null)

答案 8 :(得分:0)

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

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