MVC根据角色自动选择母版页

在使用MVC开发应用程序时,如果希望根据不同的角色选择不同风格的页面,可以通过动态设置ViewResult对象中的MasterName属性来实现,具体看代码:

一个对controller进行抽象的基类:

View Code
 1  public abstract class BaseController : Controller
 2     {
 3         /// <summary>
 4         /// 默认构造方法
 5 
 6      /// 根据角色为MasterFile进行赋值
 7         /// </summary>
 8         public BaseController() : this(UIHelper.GetMasterPage(Tsingda.XXB.Common.WebSession.UserRole)) { }
 9 
10         public BaseController(string masterfile)
11         {
12             this.MasterFile = masterfile;
13         }
14 
15    /// <summary>
16         /// 重写controller的View方法
17 
18     /// </summary>
19         protected new ViewResult View(string viewName, object model)
20         {
21             ViewData.Model = model;
22             return new ViewResult
23             {
24                 ViewName = viewName,
25                 MasterName = this.MasterFile,
26                 ViewData = ViewData,
27                 TempData = TempData
28             };
29      }
30 
31 }

 

GetMasterPage方法的内容如下:
  
View Code
 1       /// <summary>
 2      /// 根据用户角色,得到指定的模板
 3      /// <param name="role"></param>
 4         /// <returns></returns>
 5         public static string GetMasterPage(UserRole role)
 6         {
 7             string masterPageFile = "";
 8             switch (role)
 9             {
10                 case UserRole.Guest:
11                     masterPageFile = "~/Views/Shared/Guest.Master";
12                     break;
13                 case UserRole.Admin:
14                     masterPageFile = "~/Views/Shared/Admin.Master";
15                     break;
16                 case UserRole.Manager:
17                     masterPageFile = "~/Views/Shared/Manager.Master";
18                     break;
19               }
20             return masterPageFile;
21         }

 

当需要调用时,直接可以这样:
1  public class OrderController : BaseController
2     {
3      public ActionResult Index()
4      {
5        return View();
6      }
7   }

 

如果不希望根据角色选择母版页,想自己根据自己的View视图去控制,可以这样
1 public class OrderController : BaseController 
2 { 
3   public OrderController ():base(“”){} //将一个空字符传给基类的构造方法
4     public ActionResult Index() 
5     {
6       return View();
7     }  
8 }

 

 
本篇文章用到的技术有:扩展方法,抽象类,方法重载,方法重写等知识后。
posted @ 2012-05-17 15:08  张占岭  阅读(2352)  评论(1编辑  收藏  举报