Возможны ли вложенные области в ASP.NET MVC 2? - PullRequest
8 голосов
/ 17 сентября 2010

Я хотел бы создать структуру проекта с вложенными областями.Например, у меня есть область «Домой», и под ней мне бы хотелось, чтобы область «Новости» обрабатывала собственную регистрацию маршрута и правильно находила представления, когда маршрут указывает на контроллер в области «Новости».Изменяя название области «Новости» на «Дом / Новости» вместо просто «Новости», можно найти правильные представления.В основном Global.asax.cs я создаю экземпляры всех областей («Дом» и «Новости») и регистрирую их по отдельности, потому что функция RegisterAllAreas () находит области только на один уровень глубины (то есть находит и регистрирует только «Домой»)."area).

Кто-нибудь еще пробовал что-то подобное?Это большой взлом или это стабильное долгосрочное решение?Любой совет, который вы можете предложить, высоко ценится.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2011

Вы можете сделать это с MvcCodeRouting , отдельным проектом с открытым исходным кодом CodePlex.

MvcCodeRouting автоматически создает лучшие маршруты для вашего приложения ASP.NET MVC.

  1. Организуйте свои контроллеры, используя пространства имен (не больше областей) , которые могут идти так глубоко, как вы хотите .
  2. Ограничения по умолчанию для типов примитивов, которые могут быть переопределены для каждого параметра или для каждого сайта.
  3. Интеллектуальная группировка похожих маршрутов для эффективного сопоставления.
  4. Поддержка корневого контроллера.
  5. Обнаружение неоднозначных маршрутов.
  6. Форматирование маршрутов (например, сделать их строчными).
  7. Визуализируйте ваши маршруты как вызовы метода расширения MapRoute для отладки.
  8. Используйте тот же базовый маршрут на основе пространства имен для организации ваших просмотров.
1 голос
/ 24 февраля 2011

Я считаю, что создание чего-то подобного с помощью контроллеров не будет проблемой, поскольку они обнаруживаются с использованием пространства имен.

Проблема с представлениями.

По умолчанию при маршрутизации MVC (через ViewEngine) используются только значения Area, Controller и View в коллекции RouteData.

Это реализовано в VirtualPathProviderViewEngine в виртуальных методах FindView (и с использованием не виртуальных GetPath). Вам придется переопределить методы FindView в вашем ViewEngine.

Это не очень большой или сложный объем кода, но ваша лучшая ставка заключается в том, чтобы просмотреть исходный код и отследить его, потому что происходит некоторое кэширование и некоторые другие вещи ...

...