【发布时间】:2013-03-28 19:48:06
【问题描述】:
我有一个 ASP.NET MVC4 应用程序,我在其中创建多个区域,有没有一种方法可以以编程方式找出存在的区域数量及其名称。
【问题讨论】:
标签: c#-4.0 asp.net-mvc-4 asp.net-mvc-areas
我有一个 ASP.NET MVC4 应用程序,我在其中创建多个区域,有没有一种方法可以以编程方式找出存在的区域数量及其名称。
【问题讨论】:
标签: c#-4.0 asp.net-mvc-4 asp.net-mvc-areas
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 的类型。
【讨论】:
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 的类。如果您将应用程序与多个程序集中的区域分开,则需要相应地调整此代码,以便搜索所有这些程序集。
【讨论】: