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 @   张占岭  阅读(2356)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示