为什么会在404这条路线的结果未找到击球的URL /users/3
当只后在ASP.NET MVC与页码的路线拨打:routes.MapRoute()404将导致找不到
routes.MapRoute(
"Users", // Route name
"users/{page}/{sortColumn}/{sortDirection}", // URL with parameters
new { controller = "User", action = "Index", page = UrlParameter.Optional, sortColumn = UrlParameter.Optional, sortDirection = UrlParameter.Optional }, // Parameter defaults
new { page = @"\d+", sortColumn = @"[\w-]+", sortDirection = @"asc|desc" } // Route constraints
);
不该对于我来说只需要指定page
参数就可以加载路由,因为sortColumn
和sortDirection
参数都设置为UrlParameter.Optional
?
更新:
好挖一个类似的话题另一StackOverflow的答案后,看来如果你选择有一个可选路线,约束也必须是可选的。因此,将我的路线约束更改为:
new { page = @"\d*", sortColumn = @"[\w-]*", sortDirection = @"(asc|desc)?" }
只需测试零个或多个匹配项即可使我的页面加载到所有帐户。
但是,如果我尝试制作反映该路线的链接(@Html.RouteLink("test 2", "Users", new { page = 2 })
),则超链接会生成为/users
而不是/users/2
!奇怪的是,如果我手动打/users/2
那么RouteLink被写为/users/2
哈哈! :)
也许我必须做出单独的路线,但这实在是不可取的,因为我不想在Html.RouteLink()
之间拨打不同的命名路线...... 想法?
如果删除路由约束,你仍然有404的问题?只是想知道在可选参数上指定约束是否存在问题。 –
是的,它可以是路由约束,也可以是URL匹配另一条路由,但无法找到路由的操作。 – RPM1984