Asp.NET MVC3添加域(Areas)区分Admin域和用户域

问题

当一个项目中有前台页面和后台页面,即用户页面和管理员页面,.net mvc3 如何控制路由为:Admin/{controller}/{action}/{id}访问的是管理员(Admin)的域,而通过路由:{controller}/{action}/{id}则访问的是用户页面?

解决方案

.net mvc3为我们提供了域(areas)的概念,可以在项目中添加一个管理员域,可以与用户域进行区分。

解决过程

1)首先在已有的mvc项目中添加一个Admin域,右键项目-->添加-->区域,输入区域名(Admin),就会自动生成一个Areas文件夹,里面包含了新建的域(Admin);

 

2)为管理员域和用户域设置不同的路由,使得当访问Admin/{controller}/{action}/{id}时,访问的是管理员域,而非用户域。

在新建Admin域时,会自动生成一个AdminAreaRegistration.cs文件,这个文件即是为不同的域设置路由,修改如下:

View Code
 1 public class AdminAreaRegistration : AreaRegistration
 2     {
 3         public override string AreaName
 4         {
 5             get
 6             {
 7                 return "Admin";
 8             }
 9         }
10 
11         public override void RegisterArea(AreaRegistrationContext context)
12         {
13             context.MapRoute(
14                 "Admin_default",
15                 "Admin/{controller}/{action}/{id}",//Admin路由
16                 new { action = "Index", id = UrlParameter.Optional },//默认参数
17                 new string[]{"OpenCart.Admin.Controllers"}//**设置该路由所对应的Controller
18             );
19         }
20     }

并且修改用户域加载时注册的路由,修改如下:

View Code
 1 public static void RegisterRoutes(RouteCollection routes)
 2         {
 3             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4 
 5             routes.MapRoute(
 6                 "Default", // 路由名称
 7                 "{controller}/{action}/{id}", // 带有参数的 URL
 8                 new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值
 9                 new string[]{"OpenCart.Controllers"}//设置域,与Admin区分
10             );
11 
12         }

结果

经过以上设置修改之后,用户域和管理员域就可以区分开来,访问Admin/{controller}/{action}/{id}即访问管理员域,访问{controller}/{action}/{id}即访问用户域。问题得以解决。

 

posted @ 2013-04-06 17:43  chtang  阅读(1910)  评论(0编辑  收藏  举报