Nop-ASP.NET MVC Area概念的應用Admin後臺專案
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檔案。使檔案結構形成更清晰的分佈