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 }

 

 
本篇文章用到的技术有:扩展方法,抽象类,方法重载,方法重写等知识后。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值