asp.net-mvc - 为整个 Controller 分配布局

标签 asp.net-mvc razor

有什么方法可以指定整个 Controller 使用特定的布局吗?我知道您可以在 ViewStart 中分配布局,viewStart 是否可以知道正在使用什么 Controller ?

我的目标是拥有两种管理布局,其中一种在您使用管理 Controller 中的任何内容时带有额外的导航栏。

最佳答案

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

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;
        }
    }
}

然后用它装饰你的 Controller ,并且该 Controller 的所有操作(显然返回 View 结果)将使用你指定的布局:

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

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

关于asp.net-mvc - 为整个 Controller 分配布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11588367/

相关文章:

c# - Asp.NET MVC,自定义TextWriterTraceListener不创建文件

javascript - Bootbox.js - 启用/禁用按钮 + 自定义 jquery - 如何?

javascript - 如何在 MVC Razor View 中显示颜色选择器

c# - Windows Azure 网站连接外部 SQL 服务器

asp.net - url 内的双转义序列 : The request filtering module is configured to deny a request that contains a double escape sequence

asp.net-mvc - 强制所有区域使用相同的布局

c# - MVC4 - 路由值不被记住

c# - 如何使用 Razor 语法获取指向 ASP.NET MVC 4 文本中的 URL 的链接?

c# - ASP.NET - @ 语法和 <% %> 之间的区别?

asp.net-mvc - 对 ASP.NET Identity 和 IdentityDbContext 感到困惑