route.MapRoute () приводит к 404 Not Found - PullRequest
0 голосов
/ 05 июля 2011

Почему этот маршрут приводит к 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() .... Мысли?

1 Ответ

1 голос
/ 05 июля 2011

Поскольку вы предоставляете два параметра, но он ожидает 3 дополнительных, то есть он не знает, какой из них отсутствует ...

Как правило, вы не можете использовать два последовательных дополнительных параметра.

Ссылки

...