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

时间:2010-07-09 10:17:45

标签: asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4

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

选择我的“father”区域文件夹,右键单击> Add> new Area没有选项。

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

6 个答案:

答案 0 :(得分:5)

我意识到这是一个古老的问题,但我会回答它,以防其他人试图解决这个问题。解决这个问题的方法是创建在比区域更低的级别使用不同路由值的区域,例如,您的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" }
        );
    }
}

读完之后,&#34;区域&#34;还是看起来像一个字?因为它不适合我。

P.S。您可以根据需要递归多次(理论上),例如你可以做

url: "{area}/{subArea}/{subSubArea}/{subSubSubArea}/{evenMoreSubArea}/{controller}/{action}/{id}",
在RouteConfig.cs和

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

在您的地区注册。

答案 1 :(得分:3)

目前还没有任何信息可以告知是否存在嵌套区域。

将来也许这会改变。

答案 2 :(得分:2)

使用Multi-project areas的概念作为开始,我猜你可以递归地创建更多的嵌套区域。

答案 3 :(得分:0)

你不想拥有嵌套的aereas。 您的软件设计有问题。

最常见的情况是,您使用区域作为Html渲染器, 因此是显示模板。

答案 4 :(得分:0)

也许这样的事情可能有所帮助。它更像是一个mvc-contrib的研究。 我在版本1中看到它不知道它是否与MVC2兼容 这是子控制器的概念:http://mhinze.com/subcontrollers-in-aspnet-mvc/

答案 5 :(得分:0)

此时 MVC仅支持主应用程序,然后支持下一级别的区域和非嵌套区域,但您可以查看为项目添加以下功能的This Nuget Package

  • 使用可以尽可能深入的命名空间(不再包含区域)来组织您的控制器和视图。
  • 可以在每个参数或每个站点的基础上覆盖的primivite类型的默认约束。
  • 智能分组类似路线以进行有效匹配。
  • 支持根控制器。
  • 支持重载操作。
  • 支持分层(a.k.a. RESTful)路由。
  • 支持用户定义的自定义路由。
  • 检测不明确的路线。
  • 路由的格式(例如,以小写,连字符分隔,下划线等)。
  • 将路线渲染为对MapRoute扩展方法的调用,以进行调试。
  • 支持嵌入式视图(作为装配资源)。