ASP.NET MVC 項目分離
說明:
ZRT.Web 是前台網站,目錄【D:\ZRT.Web\】
ZRT.Admin 是后台管理,目錄【D:\ZRT.Web\Applications\Admin\】,刪除文件【Global.asax】
1. 繼承 RazorViewEngine,重寫路徑模板

namespace ZRT.Web.Framework
{
public class CustomerRazorViewEngine : RazorViewEngine
{
public CustomerRazorViewEngine()
{
AreaViewLocationFormats = new[]
{
// default
" ~/Applications/{2}/Views/{1}/{0}.cshtml ",
" ~/Applications/{2}/Views/Shared/{0}.cshtml "
};
AreaMasterLocationFormats = new[]
{
// default
" ~/Applications/{2}/Views/{1}/{0}.cshtml ",
" ~/Applications/{2}/Views/Shared/{0}.cshtml "
};
ViewLocationFormats = new[]
{
// default
" ~/Views/{1}/{0}.cshtml ",
" ~/Views/Shared/{0}.cshtml "
};
MasterLocationFormats = new[]
{
// default
" ~/Views/{1}/{0}.cshtml ",
" ~/Views/Shared/{0}.cshtml "
};
AreaPartialViewLocationFormats = AreaViewLocationFormats;
PartialViewLocationFormats = ViewLocationFormats;
}
}
}
{
public class CustomerRazorViewEngine : RazorViewEngine
{
public CustomerRazorViewEngine()
{
AreaViewLocationFormats = new[]
{
// default
" ~/Applications/{2}/Views/{1}/{0}.cshtml ",
" ~/Applications/{2}/Views/Shared/{0}.cshtml "
};
AreaMasterLocationFormats = new[]
{
// default
" ~/Applications/{2}/Views/{1}/{0}.cshtml ",
" ~/Applications/{2}/Views/Shared/{0}.cshtml "
};
ViewLocationFormats = new[]
{
// default
" ~/Views/{1}/{0}.cshtml ",
" ~/Views/Shared/{0}.cshtml "
};
MasterLocationFormats = new[]
{
// default
" ~/Views/{1}/{0}.cshtml ",
" ~/Views/Shared/{0}.cshtml "
};
AreaPartialViewLocationFormats = AreaViewLocationFormats;
PartialViewLocationFormats = ViewLocationFormats;
}
}
}
2. 在ZRT.Web的 Global.asax 文件里 設置試圖引擎

public
class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add( new CustomerRazorViewEngine());
}
}
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add( new CustomerRazorViewEngine());
}
}
3. 修改默認網站的路由,添加命名空間

public
class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute( " {resource}.axd/{*pathInfo} ");
routes.MapRoute(
name: " Default ",
url: " {controller}/{action}/{id} ",
defaults: new { controller = " Home ", action = " Index ", id = UrlParameter.Optional },
namespaces: new[] { " ZRT.Web.Controllers " }
);
}
}
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute( " {resource}.axd/{*pathInfo} ");
routes.MapRoute(
name: " Default ",
url: " {controller}/{action}/{id} ",
defaults: new { controller = " Home ", action = " Index ", id = UrlParameter.Optional },
namespaces: new[] { " ZRT.Web.Controllers " }
);
}
}
4. 注冊區域,在ZRT.Admin項目里添加一個類,AdminAreaRegistration 繼承 AreaRegistration

namespace ZRT.Admin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return " Admin ";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
" Admin_default ",
" Admin/{controller}/{action}/{id} ",
new { controller = " Home ", action = " Index ", area = " Admin ", id = "" },
new[] { " ZRT.Admin.Controllers " }
);
}
}
}
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return " Admin ";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
" Admin_default ",
" Admin/{controller}/{action}/{id} ",
new { controller = " Home ", action = " Index ", area = " Admin ", id = "" },
new[] { " ZRT.Admin.Controllers " }
);
}
}
}
5. 修改 ZRT.Admin項目 Views目錄下 _ViewStart.cshtml 文件里的布局路徑

@{
Layout = " ~/Applications/Admin/Views/Shared/_Layout.cshtml ";
}
Layout = " ~/Applications/Admin/Views/Shared/_Layout.cshtml ";
}
6. 修改 ZRT.Admin項目的輸出路徑