为整个控制器分配布局

时间:2012-07-21 00:01:24

标签: asp.net-mvc razor

有没有办法分配整个控制器来使用某种布局?我知道你可以在ViewStart中分配布局,无论如何,viewStart是否知道正在使用什么控制器?

我的目标是在您使用管理控制器中的任何内容时,有两个管理员布局,一个带有额外的导航栏。

1 个答案:

答案 0 :(得分:2)

您可以编写自定义操作过滤器:

public class LayoutAttribute : ActionFilterAttribute
{
    private readonly string _layout;
    public LayoutAttribute(string layout)
    {
        _layout = layout;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            result.MasterName = _layout;
        }
    }
}

然后使用它装饰你的控制器,所有动作(显然返回视图结果)都将使用你指定的布局:

[Layout("_SimpleLayout")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}