gpt4 book ai didi

asp.net-mvc - 如何覆盖 View 布局声明

转载 作者:行者123 更新时间:2023-12-04 23:03:14 24 4
gpt4 key购买 nike

在 asp.net MVC 3 中,有没有办法从 Controller 或操作过滤器覆盖 View 中设置的布局声明?

@{
布局 = "~/Views/Shared/_Layout.cshtml";
}

我已经尝试像下面的代码片段那样覆盖 OnResultExecuted 或 OnResultExecuting 中的 MasterName 属性,但无济于事。

公共(public)覆盖无效 OnResultExecuting(ResultExecutingContext filterContext)
{
var view = filterContext.Result as ViewResult;
view.MasterName = null;
}

最佳答案

您可以创建一个操作过滤器来覆盖布局文件,但如果要删除它,则必须创建一个空的布局文件,而不是将 Master 属性分配为 null。像这样:

public class OverrideLayoutFilter : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var view = filterContext.Result as ViewResult;
view.MasterName = "_LayoutEmpty";
base.OnResultExecuting(filterContext);
}
}

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

现在您的新布局文件需要放在 SharedFolder 中,您只需将 RenderBody 函数放在里面

_LayoutEmpty.cshtml
@RenderBody()

注意:如果您在要覆盖布局的 View 中定义了部分,您还必须使用空内容定义这些部分。

关于asp.net-mvc - 如何覆盖 View 布局声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com