MVC3: один контроллер, несколько маршрутов - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть приложение MVC3 с несколькими областями.Каждая область - это отдельный модуль приложения, но они имеют одну общую функцию - отчетность.Итак, я написал контроллер отчетов и представления в корневой области и хотел прикрепить их ко всем областям, используя маршрутизацию.Этот метод хорошо работал с MVC1, но затем я обновился до MVC3, маршруты перестали работать и всегда возвращали 404.

Структура маршрутизации одинакова для каждого модуля / области:

Module1/Reports.aspx/
Module1/PreportView.aspx/{id}
Module1/{controller}/{action}
Module1/{controller}/{action}/{id}

ирегистрация маршрута для модуля производится следующим способом:

protected override void RegisterRoutes(AreaRegistrationContext context, string arearoot, string defaultControllerName){
  context.MapRoute(arearoot + "Reports", arearoot + "/Reports.aspx",
    new { action = "Index", controller = "Reports" }, new string[] { "Controllers" }); //this should work in MVC3 according to docs

  context.MapRoute(arearoot + "ReportView", arearoot + "/ReportView.aspx/{id}",
    new { action = "Show", controller = "Controllers.ReportsController" });//this method worked in MVC1

  context.MapRoute(arearoot,
    arearoot + "/{controller}.aspx/{action}",
    new { controller = defaultControllerName, action = "Index" },
    GetRouteNamespaces());

  context.MapRoute(arearoot + "ItemSpecific",
    arearoot + "/{controller}.aspx/{action}/{id}");
}

protected string[] GetRouteNamespaces() {
  return new string[] { "Controllers.Module1" }; //returns proper namespace for each module
}

Я попытался присоединить RouteDebugger (который не удается из-за расширений .aspx) и Glimpse , но ни одна из них не показывает мне никаких проблем, таблица маршрутизации, кажется, в порядке, но когда я пытаюсь перейти к отчетам, я всегда получаю код ошибки 404.

Есть идеи?

1 Ответ

0 голосов
/ 17 декабря 2011
  • Пожалуйста, проверьте маршруты регистрации в вашем каталоге области.
    • Также получите весь список зарегистрированных маршрутов во время отладки. Маршрут зарегистрироваться на многих в ASP.net MVC 2 или более поздней версии, если вы используете Площадь.
      • Вы также должны указать район при регистрации маршрута. (Так же, как вы указали контроллер)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...