Вложенные области в MVC 2 / MVC 3 / MVC 4 - PullRequest
8 голосов
/ 09 июля 2010

Начиная с MVC 2, мы можем легко создавать области.Теперь мой вопрос связан с вложенными областями (областями внутри областей).

Выберите мою папку "father", щелкните правой кнопкой мыши> Add> НЕТ опции для new Area.

Возможно ли это сделать другим способом??или эта опция будет доступна в ближайшее время?

Ответы [ 6 ]

5 голосов
/ 17 марта 2016

Я понимаю, что это старый вопрос, но я отвечу на него, если кто-то еще попытается выяснить это.Решением этой проблемы является создание областей, которые используют другое значение маршрутизации на более низком уровне, чем область, поэтому, например, ваш RouteConfig будет выглядеть примерно так:

public class RouteConfig
    {
        /// <summary>
        /// A function that registers the default navigation route.
        /// </summary>
        /// <param name="routes">The RouteCollection to act on.</param>
    public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            var route = routes.MapRoute(
            name: "Default",
            url: "{area}/{subArea}/{controller}/{action}/{id}",
            defaults: new { area = "DefaultArea", controller = "Home", action = "Splash", id = UrlParameter.Optional, section = "Customer" },
            namespaces: new string[] { "Application.Controllers" });
        }
    }

И одна из ваших регистраций подобласти можетвыглядит так:

public class ApplicationSubAreaRegistration : AreaRegistration 
{
    public override string AreaName 
    {
        get 
        {
            return "ApplicationSubArea";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "SubArea_default",
            "Area/SubArea/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
            new string[] { "Application.Areas.AreaName.SubAreaName.Controllers" }
        );
    }
}

После прочтения слова "область" все еще выглядит как слово?Потому что это не для меня.

PS Вы можете делать это рекурсивно столько раз, сколько хотите (теоретически), так что, например, вы можете сделать

url: "{area}/{subArea}/{subSubArea}/{subSubSubArea}/{evenMoreSubArea}/{controller}/{action}/{id}",

в вашем RouteConfig.csи

"Area/SubArea/SubSubArea/SubSubSubArea/EvenMoreSubArea/{controller}/{action}/{id}",

при регистрации в вашем регионе.

3 голосов
/ 20 июля 2010

На данный момент нет никакой информации о том, будут ли вложенные области.

В будущем, возможно, это изменится.

2 голосов
/ 19 июля 2010

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

0 голосов
/ 12 ноября 2013

В настоящее время MVC поддерживает только Основное приложение, а затем Области следующего уровня и НЕ вложенные Области , но вы можете посмотреть на Этот пакет Nuget , который добавляет следующие функции в ваш проект:

  • Организуйте свои контроллеры и представления с использованием пространств имен (не больше областей), которые могут быть настолько глубокими, насколько вы хотите.
  • Ограничения по умолчанию для типов примитивов, которые могут быть переопределены на каждомПараметр или для каждого сайта.
  • Интеллектуальная группировка похожих маршрутов для эффективного сопоставления.
  • Поддержка корневого контроллера.
  • Поддержка перегруженных действий.
  • Поддержка иерархических (aka RESTful) маршрутов.
  • Поддержка пользовательских пользовательских маршрутов.
  • Обнаружение неоднозначных маршрутов.
  • Форматирование маршрутов (например, в нижний регистр, дефис)с разделением подчеркивания и т. д.).
  • Визуализация маршрутов в виде вызовов метода расширения MapRoute для отладки.
  • Поддержка встроенных представлений (aСборочные ресурсы).
0 голосов
/ 15 июля 2010

Может быть, что-то подобное может помочь. Это больше похоже на исследование в mvc-contrib. Я видел это для версии 1, не знаю, совместимо ли это с MVC2 Это концепция субконтроллеров: http://mhinze.com/subcontrollers-in-aspnet-mvc/

0 голосов
/ 09 июля 2010

Вы не хотите иметь вложенные области. В дизайне вашего ПО что-то не так.

наиболее распространенным случаем является использование областей в качестве Html Renderer, поэтому есть шаблоны отображения.

...