为了适应项目需求,需要将前后台的控制器和视图等文件分开,便于修改和维护:

方案一:在原有的Controller下新增Admins文件夹用于放置后台控制器文件:

控制器文件目录如下图:

搭建EF6.0+MVC4搭建框架——之路由配置-LMLPHP

视图文件目录:

修改项目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方法:

     public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Admins", // 路由名称,这个只要保证在路由集合中唯一即可
url: "Admins/{controller}/{action}/{id}",//路由规则,匹配以Admin开头的url
defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional }// 默认Admin控制器
// new string[] { "ClassificationLabDecisionWebApp.Controllers.PreClassification" }
); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
); }

此时运行程序,当前台页面跳转后台页面时会报找不到视图的错误,这是由于所建立的视图在没有在视图引擎上注册:

在项目App_Start文件夹下新增类文件MyViewEngine.cs 代码如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace XYBK_Application.App_Start
{
public sealed class MyViewEngine : RazorViewEngine
{ public MyViewEngine()
{
ViewLocationFormats = new[]
{
"~/Views/{1}/{0}.cshtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Admins/{1}/{0}.cshtml",//自定义视图路径引擎
};
base.PartialViewLocationFormats = base.ViewLocationFormats;
}
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
return base.FindView(controllerContext, viewName, masterName, useCache);
} }
}

修改Global.asax文件:

新增注册方法:

 protected void RegisterView()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyViewEngine());
}

并将方法RegisterView()放到Application_Start()方法中调用:

 protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
RegisterView();//注册视图引擎
BundleConfig.RegisterBundles(BundleTable.Bundles);
}

方案二:创建Areas文件夹,在Areas文件夹下分别创建Admin,Home,Web文件夹分别用于放置后台,前台,页面的控制器和视图等文件(具体文件夹数量和命名根据时局需要修改)。

然后分别在三个文件夹下创建Controllers控制器文件夹用于放置控制器文件,Views文件夹用于放置视图文件,ViewModel文件夹用于放置视图实体类(根据需求添加)。

Areas下的三个文件夹下必须分别添加一个类文件用于注册路由。

例如:Admins文件夹下添加类文件AdminAreaRegistration.cs,文件内容:

 using System.Web.Mvc;

 namespace XYBK_Application.Areas.Admins
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admins";
}
} public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admins_default",//路由名称
"Admins/{controller}/{action}/{id}",//路由规则,匹配以Admin开头的url
new { controller = "Admin", action = "Index", id = UrlParameter.Optional },
new string[] { "XYBK_Application.Areas.Admins.Controllers" }//文件夹下控制器对应的命名空间,根据不同文件夹修改
);
}
}
}

修改项目App_Start文件夹下的RouteConfig.cs文件的RegisterRoutes方法:

  public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default", // 路由名称,这个只要保证在路由集合中唯一即可
url: "{controller}/{action}/{id}",//路由规则,匹配url
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "XYBK_Application.Controllers" }//项目Controllers文件夹中的控制器命名空间
); }

图示:

页面跳转时可以在控制器中用 return Redirect(URL);实现页面重定向:

例如:

 public ActionResult Index()
{
return Redirect("/Home/Index/Index");//跳转到Home下的Index控制器下的Index视图
//return View();
}
05-11 18:30