2013-12-04 3 views
3

я получил боролся в такой проблеме, что, когда я иметь конфигурацию карты маршрута, как.NET MVC карта 4 маршрута и Html.Action

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

я получил «hxxp: //site.com/Merchandise/Controller/Действие/1 "из @ Html.Action (« Действие »,« Контроллер », новый {Id =« 1 »}), где ожидалось« hxxp: //site.com/Controller/Action/1 ».

Если карта маршрута настроена на

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

тогда я получил 404 при попытке в адрес, такой как «hxxp: //site.com/Merchandise/Controller» с товарами, будучи не контроллер ("hxxp: // site.com/Merchandise/Controller/Action/1 «ОК КТО). Как я могу решить это противоречие? Я хочу, чтобы «Merchandise» здесь выступал в роли категории, но не контроллера.

+0

Товар в вашем случае можно назвать областью. Обратитесь к областям в ASP.NET MVC. – ckv

ответ

2

Товар в вашем случае можно назвать областью. Обратитесь к областям в ASP.NET MVC В соответствии с дизайном маршрутов, если у вас есть какие-либо пользовательские маршруты, которые должны быть определены до маршрута по умолчанию. Потому что это порядок, в котором URL-адреса декодируются для маршрутизации. Таким образом, в вашем первом случае у вас есть собственный маршрут, определенный до маршрута по умолчанию, и, следовательно, он работает правильно, а во втором случае сначала определяется маршрут по умолчанию.

+0

Хороший совет, спасибо, много. Но это все еще не совсем подходит моей ситуации. Я пытаюсь найти решение ниже, ведьма исправляет 404 и по-прежнему действует правильно в Html.Action (или в Html.BeginForm и т. Д.). ненужное расширение .mvc для имени контроллера в Url. – korall

+0

routes.MapRoute ( name: "Default", URL: "{controller} .mvc/{action}/{id}", defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} ); routes.MapRoute ( name: "Merchandise", url: "Товар/{контроллер} .mvc/{действие}/{id}", defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} ); – korall

+0

В чем вопрос? Вы хотите, чтобы Merchadise был частью вашего URL-адреса или нет? – ckv

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