设置域默认路由
由于现在好多项目都不是原生的MVC项目,好多都是拼拼凑凑拆拆分分用点Spring用点Ibaties,项目跟原来新建的大不一样,这还是算好的,更有甚框架都不用原生的,非要加点自己的东西然后改吧改吧,
那项目更是面目全非,从头做还好,最怕半路接手没文档没注释各种bug层出不穷······大众写法还不适用,我怎么出现这种感觉了呢····扯远了。
添加域文件夹Areas
或许是项目越来越大,需要用到域来更好的管理
Global中或者MVC4的RegisterRoutes页面中设置
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathinfo}"); 4 routes.IgnoreRoute("staticfile/{*pathinfo}"); 5 routes.MapRoute( 6 name: "myarea", 7 url: "{controller}/{action}/{id}", 8 defaults: new { controller = "xxx", action = "Index", id = UrlParameter.Optional }, 9 namespaces: new string[] { "WebSite.Areas.myarea.Controllers" } 10 ); 11 }
至此 设置好controller,但是会默认的寻找原来的~/Views/xxx
重新定义View匹配方式
1 public class ViewEngine : RazorViewEngine 2 { 3 public ViewEngine() 4 { 5 6 ViewLocationFormats = new[] 7 { 8 "~/Views/{1}/{0}.cshtml", 9 "~/Views/Shared/{0}.cshtml", 10 "~/Areas/xxx/Views/{1}/{0}.cshtml" 11 }; 12 } 13 public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) 14 { 15 return base.FindView(controllerContext, viewName, masterName, useCache); 16 } 17 }
最后在Application_Start事件中注册
1 protected void RegisterView() 2 { 3 ViewEngines.Engines.Clear(); 4 ViewEngines.Engines.Add(new ViewEngine()); 5 } 6 7 protected void Application_Start() 8 { 9 AreaRegistration.RegisterAllAreas(); 10 11 RegisterGlobalFilters(GlobalFilters.Filters); 12 RegisterRoutes(RouteTable.Routes); 13 RegisterView(); 14 }