Почему этот маршрут приводит к 404 Not Found при нажатии url /users/3
для вызова по маршруту с номером страницы только в ASP.NET MVC:
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()
....
Мысли?