2015-07-24 5 views
0

Я пытаюсь получить следующие ссылки:asp.net MVC маршрут с параметром

  • /(карты до AccountController/Index)
  • /счет/входа (карты до AccountController/Login)
  • /2112/письма (карты к EmailsController/Index действия и 2112 будет параметр маршрута)
  • /2112/письма/список (карты в EmailsController/List действий и 212 будет маршрут годовых)

Я не могу заставить маршруты работать, поскольку они, кажется, конфликтуют друг с другом. Следующее заставляет меня иметь параметр маршрута во все времена, что не то, что мне нужно. Он не будет связываться без предоставления параметра базы данных.

routes.MapRoute(
    name: "Default", 
    url: "{database}/{controller}/{action}", 
    defaults: new { database = UrlParameter.Optional, controller = "Account", action = "Index" } 
); 
+0

'routes.MapRoute ( название: "Default_with_hidden_index", URL: "{контроллер}", по умолчанию: новые {действие = "Index"}, ограничения: новый {action = "Index"} ); routes.MapRoute ( название: "По умолчанию", URL: "{контроллер}/{действие}", по умолчанию: новый {контроллер = "Счет", действие = "Войти"} ); ' Это будет решать первую и вторую темы, которые я задал, но не две другие. – HelderMPinhal

ответ

1

Порядок важен в конфигурации вашего маршрута. Ключ к маршрутизации в MVC - это начать с самых конкретных маршрутов и работать. Также, поскольку у вас есть определенные правила маршрутизации для контроллера электронной почты, вы можете указать имя контроллера специально в параметре URL. Так что здесь вы могли бы сделать это:

routes.MapRoute(
    name: "Emails", 
    url: "{id}/Emails/{action}", 
    defaults: new { controller = "Emails", action = "Index" }, 
    constraints: new { id = @"\d+" } 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}", 
    defaults: new { controller = "Account", action = "Index" } 
); 
+0

Ему также может понадобиться идентификатор по умолчанию, поэтому я бы подумал о добавлении ограничения для того, чтобы идентификатор был числом на маршруте электронной почты –

+0

@ DanielJ.G. Это возможно, но мы не можем сказать из текста вопроса. В любом случае я заметил опечатку, поэтому добавил ее, пока я это исправлял. – DavidG

+0

Спасибо за помощь. Он работает на 100% за то, что я спросил. – HelderMPinhal

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