MVC 2/MVC 3/MVC 4中的嵌套区域

Dry*_*ods 8 asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4

从MVC 2开始,我们可以轻松创建区域.现在我的问题与嵌套区域(区域内的区域)有关.

选择我的" father"区域文件夹,右键单击Add>>否选项new Area.

是否有可能以其他方式做到这一点?或者这个选项会在不久的将来推出吗?

Ces*_*ion 6

我意识到这是一个古老的问题,但是如果有人尝试找出答案,我会回答。一种解决方案是创建使用比区域更低级别的路由值的区域,例如,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" });
        }
    }
Run Code Online (Sandbox Code Playgroud)

您的一个分区注册可能看起来像这样:

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" }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

看完之后,“区域”看起来还是一个词吗?因为这对我来说不是。

PS:您可以(理论上)根据需要多次进行递归操作,例如可以

url: "{area}/{subArea}/{subSubArea}/{subSubSubArea}/{evenMoreSubArea}/{controller}/{action}/{id}",
Run Code Online (Sandbox Code Playgroud)

在您的RouteConfig.cs和

"Area/SubArea/SubSubArea/SubSubSubArea/EvenMoreSubArea/{controller}/{action}/{id}",
Run Code Online (Sandbox Code Playgroud)

在您所在的地区注册。