请举例说明如何使用reditection生成ActionLink:http://localhost/Articles?View=xx而不是http://localhost/Articles/View/xx? 我这样做如下(它给我第一种重定向):
<%= Html.ActionLink("View this article", "View", "Articles", new { id = Model.Item.Slug }, null)%>
答案 0 :(得分:2)
只需确保id参数未映射到Global.asax中的Route。只需将id更改为其他类似recordId的内容,并将操作签名更改为使用recordId而不是id。
答案 1 :(得分:1)
Global.asax中的默认路由设置为匹配/ {controller} / {action} / {id}。当您使用上面的代码创建操作链接时,您告诉MVC路由设置控制器为“文章”的路由,操作为“查看”,ID为“xxx”。
您要查找的网址是/ Articles?View = xx。在这种情况下,您说您没有遵循/ {controller} / {action} / {id}范例。您应该在global.asax中设置静态路由,如下所示:
routes.MapRoute("Articles", //the name of the route
"Articles", // the URL you want to match
new { controller = "Articles", action = "Index" });
但是,请记住,路线是按照设置的顺序进行测试的,因此您需要将其放在列表顶部附近。您还需要测试其他路线以确保它们不受影响。
您的操作链接的代码将是
Html.ActionLink("View this article", "Index", "Articles", new { view = "xx" }, null)