使用Html。ActionLink调用不同控制器上的动作

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

我在帽子控制器的索引视图,我试图使用下面的代码创建一个链接到产品控制器的细节动作。

<%= 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 = "" } );
242933 次浏览

你打错了ActionLink的过载。试试这个吧。

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

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

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

你可以在这里得到期货集合:http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

你想要的是超负荷:

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

试试吧,它工作得很好

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

使用这些参数,您将触发错误的重载函数/方法。

对我有用的是:

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

它会触发HtmlHelper。ActionLink(字符串linkText,字符串actionName,字符串controllerName,对象routeValues,对象htmlAttributes)

我使用MVC 4。

恭喜恭喜!

另一种解决方案是使用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>

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

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

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

ProductId是该表的主键。下面是Index.cshtml中的代码行

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