10

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

选择我的“ father”区域文件夹,鼠标右键单击 > Add> NO 选项new Area

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

4

6 回答 6

9

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

在您所在的地区注册。

于 2016-03-17T14:12:06.583 回答
3

目前没有任何信息表明是否会有嵌套区域。

在未来,也许这会改变。

于 2010-07-20T12:45:18.910 回答
2

使用多项目区域的想法 作为开始,我想你可以递归地创建更多的嵌套区域。

于 2010-07-19T13:13:18.353 回答
0

也许这样的事情会有所帮助。它更像是 mvc-contrib 中的一项研究。看了1版不知道是不是兼容MVC2 是子控制器的概念:http: //mhinze.com/subcontrollers-in-aspnet-mvc/

于 2010-07-15T15:58:05.573 回答
0

目前MVC 仅支持 Main Application ,然后支持下一级的 Areas 而不是嵌套的 Areas,但您可以查看This Nuget Package,它为您的项目添加了以下功能:

  • 使用可以随心所欲地深入的命名空间(没有更多区域)来组织您的控制器和视图。
  • 可以基于每个参数或每个站点覆盖的原始类型的默认约束。
  • 对相似路线进行智能分组,以实现高效匹配。
  • 支持根控制器。
  • 支持重载操作。
  • 支持分层(又名 RESTful)路由。
  • 支持用户定义的自定义路由。
  • 检测不明确的路线。
  • 路由格式(例如小写、连字符分隔、下划线分隔等)。
  • 将您的路线渲染为对 MapRoute 扩展方法的调用,以进行调试。
  • 支持嵌入式视图(作为程序集资源)。
于 2013-11-11T20:52:04.840 回答
-2

您不希望有嵌套区域。您的软件设计有问题。

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

于 2010-07-09T10:26:53.613 回答