为什么在点击URL /users/3
以仅在ASP.NET MVC中调用具有页码的路由时,此路由会导致404 Not Found:
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
lol Argh! :)
也许我必须制作单独的路线,但这实际上是不可取的,因为我不想在Html.RouteLink()
中调用不同命名的路线....
想法?
答案 0 :(得分:1)
因为你提供了两个参数,但它需要3个可选的..所以它不知道哪个参数丢失了......
通常,您不能使用两个连续的可选参数。
参考