Почему строки запроса в моем маршруте ASP.NET MVC? - PullRequest
9 голосов
/ 22 октября 2008

На ASP.NET MVC (бета) сайте, который я разрабатываю, иногда вызовы ActionLink возвращают мне URL-адреса, содержащие строки запросов. Я выделил обстоятельства, которые вызывают такое поведение, но я до сих пор не понимаю, почему вместо создания чистого URL-адреса он решает использовать параметр строки запроса. Я знаю, что функционально они одинаковы, но для согласованности (и внешнего вида) URL-адресов это не то, что я хочу.

Вот мои маршруты:

routes.MapRoute(
    "Photo Gallery Shortcut",
    "group/{groupname}",
    new { controller = "Photos", action = "All", Id = "" });

routes.MapRoute(
    "Tagged Photos", //since the Tagged action takes an extra parameter, put it first
    "group/{groupname}/Photos/Tagged/{tagname}/{sortby}",
    new { controller = "Photos", action = "Tagged", Id = "", SortBy = "" });

routes.MapRoute(
    "Photo Gallery", //since the Gallery's defualt action is "All" not "Index" its listed seperatly
    "group/{groupname}/Photos/{action}/{sortby}",
    new { controller = "Photos", action = "All", Id = "", SortBy = "" });

routes.MapRoute(
    "Group",  //<-- "Group" Category defined above
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "Index", Id = ""});

Теперь проблема возникает только тогда, когда я смотрю на представление, описанное маршрутом с именем «Помеченные фотографии», и выполняю ActionLink через:

Html.ActionLink<PhotosController>(p => p.All((string)ViewData["group"], ""), "Home")

Который производит URL:

http://domain/group/GROUPNAME?sortBy=

В любом другом представлении URL-адрес:

http://domain/group/GROUPNAME

Я снял Phil 101 * * Отладчик маршрутизации ASP.NET , и все выглядит по порядку. Это меня поставило в тупик. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 22 октября 2008

Не уверен, почему разные представления производят разные URL.

Но вы можете избавиться от этого параметра sortBy, назначив значение по умолчанию для первого маршрута.

new {sortBy = ""}

Во время генерации, если sortBy соответствует значению по умолчанию, механизм маршрутов пропускает этот параметр (если он находится в строке запроса).

2 голосов
/ 22 октября 2008

Вам придется использовать здесь именованные маршруты, а не маршруты действий, потому что маршрутизация работает в ASP.NET, потому что она «первое соответствие», а не «лучшее соответствие».

0 голосов
/ 22 октября 2008

Я думаю, что это ваш первый маршрут. У этого тоже есть действие Все. И поскольку sortby не указан, он выставляется как параметр строки запроса

Это все равно будет работать с методом действия «Все» в PhotosController, поскольку он просто заполняет параметр sortby значением строки запроса.

В отладчике маршрутов выполняется 3-й маршрут или 1-й?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...