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

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

方案一:在原有的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         }

 

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

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

 

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

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

 1 using System.Web.Mvc;
 2 
 3 namespace XYBK_Application.Areas.Admins
 4 {
 5     public class AdminAreaRegistration : AreaRegistration
 6     {
 7         public override string AreaName
 8         {
 9             get
10             {
11                 return "Admins";
12             }
13         }
14 
15         public override void RegisterArea(AreaRegistrationContext context)
16         {
17             context.MapRoute(
18                 "Admins_default",//路由名称
19                 "Admins/{controller}/{action}/{id}",//路由规则,匹配以Admin开头的url
20                 new { controller = "Admin", action = "Index", id = UrlParameter.Optional },
21                 new string[] { "XYBK_Application.Areas.Admins.Controllers" }//文件夹下控制器对应的命名空间,根据不同文件夹修改
22             );
23         }
24     }
25 }

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

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

图示:

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

例如:

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

 

posted on 2015-09-29 15:55  小呀么小二郎  阅读(337)  评论(0编辑  收藏  举报

导航