2012-06-14 3 views
0

С учетом следующих два определенных маршруты:MVC3 Маршруты - как обеспечить маршрут с определенным значением имеет приоритет?

 routes.MapRoute(name: "CityCategoryPage", url: "{city}-{state}/{categoryName}/__c/", defaults: new { controller = "Home", action = "GeoSubCategories" }); 
     routes.MapRoute(name: "CityStateCategoryResults", url: "{city}-{state}/{categoryName}/{searchTerm}/{pageNumber}/{pageSize}", defaults: new { controller = "Results", action = "SearchCityStateCategory", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional }); 

Если удалить второй маршрут, я получаю ожидаемое действие увидеть результаты на домашней странице. Однако при наличии второго маршрута я всегда пересылаюсь на страницу результатов.

У меня есть идея, почему это происходит: "_ c" по-прежнему рассматривается как необязательный параметр, который соответствует необязательному условию для второго маршрута, но не уверен, как заставить это работать. Я бы предпочел не добавлять « _c» к URL-адресу - также интересно, есть ли другой способ?

Спасибо.

ответ

1

Если я правильно понял, что вы хотите, чтобы страница была отображена, если поисковый запрос не предусмотрен?

Если да, то попробуйте подобрать маршрут с дополнительным SEARCHTERM первым, и по умолчанию для маршрута домашней страницы, если нет SEARCHTERM нет, так как:

routes.MapRoute(name: "CityStateCategoryResults", url: "{city}-{state}/{categoryName}/{searchTerm}/{pageNumber}/{pageSize}", defaults: new { controller = "Results", action = "SearchCityStateCategory", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional }); 
routes.MapRoute(name: "CityCategoryPage", url: "{city}-{state}/{categoryName}/", defaults: new { controller = "Home", action = "GeoSubCategories" }); 
Смежные вопросы