2013-09-01 1 views
0

Определяется маршрут: методКак определить маршрут, который не требует действия в URL?

routes.MapRoute(
       name: "SearchRoute", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Search", 
       action = "Index", id = UrlParameter.Optional } 

индекс:

public ActionResult Index(int? id, SearchViewModel model) 
  1. я просматриваю к http://xxx.xxx.xxx.xxx/Search и указательным действие удар по моей SearchController, хорошо.
  2. Я просматриваю http://xxx.xxx.xxx.xxx/Search/1 и получаю ошибку 404.
  3. Я просматриваю http://xxx.xxx.xxx.xxx/Search/Index/1, ОК.

Я предпочел бы работать с 2 и не должен вводить /Index/1. Как?

+0

Вы можете показать индексный метод? – DarthVader

+0

Система маршрутизации не может определить разницу между идентификатором и именем действия. – SLaks

+0

лет, что там делает SearchViewModel? ваш метод поиска лучше быть HttpPost – DarthVader

ответ

0

Вы можете создать свой маршрут, как это:

routes.MapRoute(
    name: "SearchRoute", 
    url: "{controller}/{id}", 
    defaults: new { controller = "Search", action = "Index", id = UrlParameter.Optional } 
); 

Это только когда-либо целевой Index действия, но это звучит как то, что вы хотите.

0

В маршрутизации есть приоритет, то есть: какой маршрут вы определяете в первую очередь. Попробуйте следующее:

routes.MapRoute(
       name: "SearchRoute", 
       url: "Search/{id}", 
       defaults: new { controller = "Search", 
       action = "Index", id = UrlParameter.Optional } 

routes.MapRoute(
       name: "DefaultRoute", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", 
       action = "Index", id = UrlParameter.Optional } 
+0

Это сломает '/ Search/OtherActionName' – SLaks

Смежные вопросы