我无法让@ActionLink呈现正确的url以使用我的MVC3默认路由

时间:2011-10-21 20:47:11

标签: asp.net-mvc-3 routing razor

我正在尝试利用默认路由,因此我获得了一个没有查询字符串参数的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 } );           
    }

1 个答案:

答案 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}