routes.MapRoute()导致404 Not Found

时间:2011-07-05 01:35:40

标签: c# .net asp.net-mvc-3 asp.net-mvc-routing

为什么在点击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
);

由于pagesortColumn参数都设置为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()中调用不同命名的路线.... 想法?

1 个答案:

答案 0 :(得分:1)

因为你提供了两个参数,但它需要3个可选的..所以它不知道哪个参数丢失了......

通常,您不能使用两个连续的可选参数。

参考