在使用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
本篇文章用到的技术有:扩展方法,抽象类,方法重载,方法重写等知识后。
作者:仓储大叔,张占岭,
荣誉:微软MVP