zan*_*ona 5 .net asp.net-mvc controller view master
有机会,有没有简单的方法为特定控制器内的所有操作设置默认的MasterView?
例如,如果我有HomeController,我希望其中的所有操作都默认继承Site.Master,但如果我在AccountsController中,我希望所有操作都继承Admin.Master等等.
我成功地做到了:
return View("viewName", "masterName", objectModel);
Run Code Online (Sandbox Code Playgroud)
但是通过这样做,我每次调用View方法时都必须应用它.
我正在寻找一些更简单的东西,我们可以声明:
class HomeController < ApplicationController
layout 'site'
def index
end
def create
...
end
class AccountsController < ApplicationController
layout 'admin'
def index
end
def create
...
end
Run Code Online (Sandbox Code Playgroud)
那可能吗?
提前致谢
您可以在该Controller类中重写OnActionExecuting.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewData["MasterfileToUser"] = "site";
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意,可以将其转换为ActionFilterAttribute,您可以在控制器或操作级别上应用
using System;
using System.Web.Mvc;
public class MasterFileFilterAttribute : ActionFilterAttribute
{
public string Master { get; set; }
public override void OnActionExecuted( ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult)
((ViewResult)filterContext.Result).MasterName = Master;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你反过来使用它:
[MasterFileFilterAttribute(Master = "site")]
public class HomeController : Controller
{
// Action methods
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2556 次 |
| 最近记录: |