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 }

 

 
本篇文章用到的技术有:扩展方法,抽象类,方法重载,方法重写等知识后。

你可能感兴趣的:(mvc)