MVC小系列(十六)在控制器级别或具体Action级别上动态设定模板页(Layout)

Posted 那就让我这样吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC小系列(十六)在控制器级别或具体Action级别上动态设定模板页(Layout)相关的知识,希望对你有一定的参考价值。

方法就是使用:ActionFilterAttribute
它的几个方法:OnActionExecuted,OnActionExecuting,OnResultExecuted和OnResultExecuting,它们记录一个action从加载到页面最终显示在浏览器的全过程,这个东西一般用在页面权限验证,LayOut页面控制上
这里面的几个方法执行顺序:OnActionExecuting action执行前
OnActionExecuted action执行后
OnResultExecuting 页面渲染后
OnResultExecuted 页面渲染结果

可以通过ActionFilterAttribute的特性,写个派生类,然后去覆盖OnActionExecuted
将layout页面修改(注意是修改,因为在action执行后layout已经是默认的布局页了)

 

 /// <summary>
    /// 自定义模板页面
    /// </summary>
    public class LayoutAttribute : ActionFilterAttribute
    {
        private readonly string _masterName;
        public LayoutAttribute(string masterName)
        {
            _masterName = masterName;
        }
        /// <summary>
        /// 页面渲染结束后执行
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            var result = filterContext.Result as ViewResult;
            if (result != null)
            {
                result.MasterName = _masterName;
            }
        }
    }
View Code

最后把它应用到controller或者action上,使用很简单

 [Filters.Layout("_LayoutEd")]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }
        [Filters.Layout("_LayoutEd")]
        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
View Code

 

以上是关于MVC小系列(十六)在控制器级别或具体Action级别上动态设定模板页(Layout)的主要内容,如果未能解决你的问题,请参考以下文章

MVC小系列PartialView中的页面重定向

MVC中的Controller

MVC如何指定执行哪个控制器Action方法

MVC系列-11.两表联合-发表文章

ASP.NET MVC中如何以ajax的方式在View和Action中传递数据

通过 AJAX 将数组传递给 mvc Action