ASP.NET MVC Area概念的应用Admin
For example, you might have a “Blog”area (including a bunch of controller classes related to blogging) and a “Calendar” area (another bunch ofrelated controllers). It’s a nice way of splitting a huge project into asmaller set of manageable ones.在MVC应用中分解程序的概念,由Area组成,Admin中即NameSpace: Nop.Admin.Controllers
一个Area加入后必然的产生一个Class:
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
//注册Area。。。
public override void RegisterArea(AreaRegistrationContextcontext)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", area = "Admin",id = "" },
new[] { "Nop.Admin.Controllers"}
);
}
}
这个Default的名字是Area_default.AreaName属性用来定义Area的名子,RegisterArea(AreaRegistrationContext context) 方法中可以看出在浏览器的地址栏中URL的样式为Profile/{controller}/{action}/{id},是4级构结,只要将context.MapRoute(…)改为
另外就是 一定要调用到,无论在APP_start还是public static voidRegisterRoutes(RouteCollection routes)
- -
//Registering some regular mvc stuf
AreaRegistration.RegisterAllAreas();
AreaRegistration.RegisterAllAreas()方法,这个方法的目地主是找出所有继承了AreaRegistration的类,并执行RegisterArea(…)方法来完成注册
public static void RegisterAllAreas() {
RegisterAllAreas(null);
}
public staticvoid RegisterAllAreas(object state) {
RegisterAllAreas(RouteTable.Routes,new BuildManagerWrapper(),state);
}
internalstatic void RegisterAllAreas(RouteCollectionroutes, IBuildManager buildManager, object state) {
List<Type> areaRegistrationTypes = TypeCacheUtil.GetFilteredTypesFromAssemblies(_typeCacheName,IsAreaRegistrationType, buildManager);
//以上方法找出所有继承了AreaRegistration类的Type对象
foreach (Type areaRegistrationType inareaRegistrationTypes) {
AreaRegistrationregistration = (AreaRegistration)Activator.CreateInstance(areaRegistrationType);
registration.CreateContextAndRegister(routes, state);
}
}
用mvc2建立一个新项目,在网站根目录下建立Areas文件夹,在Areas文件夹建立你要区分的目录,例如本例的Website,然后继续在Website目录下增加Views目录,继续在views目录下增加需要分类管理Controller目录和建立aspx文件。使文件结构形成更清晰的分布
参考:http://msdn.microsoft.com/en-us/library/system.web.mvc.arearegistration.aspx