Using Html.ActionLink to call action on different controller
我试图使用
我在Hat控制器的索引视图上,我正在尝试使用下面的代码创建一个指向Product控件的Details操作的链接。
1 | <%= Html.ActionLink("Details","Details","Product", new { id=item.ID }) %> |
这不会创建指向Product控件上的Details的链接,而是在Hat控制器下生成一个指向Details操作的链接,并将Length参数附加到它的末尾:
1 | Hat/Details/9?Length=7 |
由于此问题,我无法使用
PS:我使用的是MVC附带的默认路由设置
1 2 | routes.MapRoute("Default","{controller}/{action}/{id}", new { controller ="Home", action ="Index", id ="" } ); |
你想要的是这个重载:
1 2 3 | //linkText, actionName, controllerName, routeValues, htmlAttributes <%=Html.ActionLink("Details","Details", "Product", new {id = item.ID}, null) %> |
使用该参数,您将触发错误的重载功能/方法。
什么对我有用:
1 | <%= 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!
为了清楚起见,我建议使用命名参数编写这些助手,如下所示:
1 2 3 4 5 6 7 8 9 | @Html.ActionLink( linkText:"Details", actionName:"Details", controllerName:"Product", routeValues: new { id = item.ID }, htmlAttributes: null ) |
如果您获取MVC Futures程序集(我强烈推荐),您可以在创建ActionLink时使用泛型,并使用lambda来构造路径:
1 | <%=Html.ActionLink<Product>(c => c.Action( o.Value ),"Details" ) %> |
你可以在这里获得期货装配:http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId = 24471
你错了ActionLink的重载。试试这个。
1 | <%= Html.ActionLink("Details","Details","Product", new RouteValueDictionary(new { id=item.ID })) %> |
试试它工作正常
1 | <%:Html.ActionLink("Details","Details","Product", new {id=item.dateID },null)%> |
另一种解决方案是使用
1 | Details |
这段代码在局部视图中对我有用:
1 | @item.Title |