【问题标题】:ASP.NET MVC4 List of all areasASP.NET MVC4 所有领域列表
【发布时间】:2013-03-28 19:48:06
【问题描述】:

我有一个 ASP.NET MVC4 应用程序,我在其中创建多个区域,有没有一种方法可以以编程方式找出存在的区域数量及其名称。

【问题讨论】:

    标签: c#-4.0 asp.net-mvc-4 asp.net-mvc-areas


    【解决方案1】:

    AreaRegistration.RegisterAllAreas(); 使用DataTokens["area"] 注册每个区域路由,其中​​值是区域的名称。

    所以你可以从RouteTable获取注册的区域名称

    var areaNames = RouteTable.Routes.OfType<Route>()
        .Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area"))
        .Select(r => r.DataTokens["area"]).ToArray();
    

    如果您正在寻找 AreaRegistration 本身,您可以使用反射在您的组件中获取派生自 AreaRegistration 的类型。

    【讨论】:

      【解决方案2】:

      AreaRegistration.RegisterAllAreas() 不能用于 Web 应用程序的预初始化。但是,如果您想在不致电 RegisterAllAreas() 的情况下获得这些区域,例如在自动化测试中,下面的代码可能会有所帮助:

           var areaNames = new List<string>();
           foreach (var type in typeof(MvcApplication).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(AreaRegistration)))) {
              var areaRegistration = Activator.CreateInstance(type) as AreaRegistration;
              areaNames.Add(areaRegistration.AreaName);
           }
      

      注意MvcApplication 是从HttpApplication 派生的类。您可以使用任何类名,只要该类与程序集注册在同一个程序集中,即派生自 AreaRegistration 的类。如果您将应用程序与多个程序集中的区域分开,则需要相应地调整此代码,以便搜索所有这些程序集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 2013-02-16
        • 2018-07-25
        相关资源
        最近更新 更多