为了适应项目需求,需要将前后台的程序分开,便于修改和维护:
方案一:在原有的Controller下新增Admins文件夹用于放置后台控制器文件:
控制器文件目录如下图:
视图文件目录:
修改项目App_Start文件夹下的RouteConfig.cs文件的RegisterRoutes方法:
新增
routes.MapRoute( name: "Admins", // 路由名称,这个只要保证在路由集合中唯一即可 url: "Admins/{controller}/{action}/{id}",//路由规则,匹配以Admin开头的url defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional } // new string[] { "ClassificationLabDecisionWebApp.Controllers.PreClassification" } );
修改后的RegisterRoutes方法:
1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 6 routes.MapRoute( 7 name: "Admins", // 路由名称,这个只要保证在路由集合中唯一即可 8 url: "Admins/{controller}/{action}/{id}",//路由规则,匹配以Admin开头的url 9 defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional }// 默认Admin控制器 10 // new string[] { "ClassificationLabDecisionWebApp.Controllers.PreClassification" } 11 ); 12 13 routes.MapRoute( 14 name: "Default", 15 url: "{controller}/{action}/{id}", 16 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 17 ); 18 19 20 }
此时运行程序,当前台页面跳转后台页面时会报找不到视图的错误,这是由于所建立的视图在没有在视图引擎上注册:
在项目App_Start文件夹下新增类文件MyViewEngine.cs 代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace XYBK_Application.App_Start 8 { 9 public sealed class MyViewEngine : RazorViewEngine 10 { 11 12 public MyViewEngine() 13 { 14 ViewLocationFormats = new[] 15 { 16 "~/Views/{1}/{0}.cshtml", 17 "~/Views/Shared/{0}.cshtml", 18 "~/Views/Admins/{1}/{0}.cshtml",//自定义视图路径引擎 19 }; 20 base.PartialViewLocationFormats = base.ViewLocationFormats; 21 } 22 public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) 23 { 24 return base.FindView(controllerContext, viewName, masterName, useCache); 25 } 26 27 } 28 }
修改Global.asax文件:
新增注册方法:
protected void RegisterView() { ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new MyViewEngine()); }
并将方法RegisterView()放到Application_Start()方法中调用:
1 protected void Application_Start() 2 { 3 AreaRegistration.RegisterAllAreas(); 4 5 WebApiConfig.Register(GlobalConfiguration.Configuration); 6 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 7 RouteConfig.RegisterRoutes(RouteTable.Routes); 8 RegisterView();//注册视图引擎 9 BundleConfig.RegisterBundles(BundleTable.Bundles); 10 }
方案二:待补充。。。
原文:http://www.cnblogs.com/xiaoerlang90/p/4846547.html