我正在尝试利用默认路由,因此我获得了一个没有查询字符串参数的URL。
所以,我现在有了这个网址:
http://www.mysite.Items/Edit?ItemID=19719
我正在尝试获取这样的网址:
http://www.mysite.Items/Edit/19719
路由有效,但我无法获得@ Html.ActionLink方法来生成第二个URL。
这是我的剃刀代码:
@Html.ActionLink("Edit", "Edit", new {item.ItemID}, new { id = "edit-" + item.ItemID })
第一个参数是我链接的文字。第二个参数是Action。第三个是ID值,最后一个参数是和我用于某些javascript的HTML属性。
最初我的第三个论点是
new {itemID = itemID}
这是我的编辑操作期望名为itemID的整数值作为参数。我将其更改为'id',因此路由可以正常工作。
理想情况下,我想要一条路径将19719值传递给名为itemID的参数的动作,但这超出了这个问题的范围。
提前致谢。
解决 感谢Darin Dimitrov获得此解决方案。
我最终以我原来的方式留下了我的html代码和动作参数。所有真正需要的是对我的路线进行更新。我应该注意到,我必须在默认之前添加新的路线图。无论如何,现在我的路线注册使这一切都有效。
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("", "Items/{action}/{itemID}", new { controller = "Items", action = "Details", itemID = @"\d+" });
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
}
答案 0 :(得分:4)
默认路由使用id
作为路由令牌名称,因此您需要:
@Html.ActionLink(
"Edit",
"Edit",
new { id = item.ItemID },
new { id = "edit-" + item.ItemID }
)
注意 new { id = item.ItemID }
而不是new {itemID = itemID}
而不是new {item.ItemID}
。