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

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

我在帽子控制器的索引视图,我正在尝试使用下面的代码创build一个链接到产品控制器的详细信息操作。

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

而不是创build一个链接到产品控制器的详细信息,这将生成一个指向帽子控制器下的详细信息操作的链接,并附加一个长度参数的结尾:

 Hat/Details/9?Length=7 

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

PS:我正在使用MVC自带的默认路由设置

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

你想要的是这个超载:

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

有了这个参数,你正在触发错误的重载函数/方法。

什么对我有效:

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

它触发HtmlHelper.ActionLink(stringlinkText,stringactionName,stringcontrollerName,对象routeValues,对象htmlAttributes)

我正在使用MVC 4。

Cheerio!

如果你抓住MVC Futures程序集(我强烈推荐),那么你可以在创buildActionLink和lambda来构build路由时使用通用的:

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

您可以在这里获得期货组合: http : //aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

您错误的ActionLink超负荷。 试试这个。

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

试试吧,它工作正常

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

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

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

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

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

这个代码在部分视图中为我工作:

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