gpt4 book ai didi

asp.net-mvc - 如何通过属性过滤器在 MVC 中设置 Razor 布局?

转载 作者:行者123 更新时间:2023-12-01 23:09:34 25 4
gpt4 key购买 nike

我想通过基本 Controller 或属性中的代码设置默认的 Razor 布局。文档中提到这是可能的,但我不知道它是如何完成的。

我知道 View 方法有 masterPage 参数可用,但我希望 Controller 返回的所有 View 都自动设置此值。

不,我不能为此使用 _ViewStart,因为我的 View 将位于不同的位置(这不是正常的 MVC 站点配置)。

谢谢

最佳答案

我认为你可以编写一个像这样的 ActionFilter

public class YourCustomLayoutAttribute : ActionFilterAttribute, IResultFilter
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var viewResult = filterContext.Result as ViewResult;
if(viewResult != null)
{
// switch the layout
// I assume Razor will follow convention and take the "MasterName" property and change the layout based on that.
viewResult.MasterName = "CustomLayout";
}
}
}

我只是凭感觉写了这段代码,没有编译器,所以它可能无法编译,但你可能明白了。我认为 IResultFilter 是您想要的正确接口(interface),它具有在渲染 View 之前执行的方法。如果这是正确的,您应该能够修改即将动态渲染的 View 的 MasterName。

这将是 Controller 代码的用法。

[YourCustomLayout] // this should trigger your custom action result for all actions
public class MyController : Controller
{
public ActionResult Index()
{
return View("Index", "MainLayout"); // even if you were to use the overload to set a master, the action result should override it as it executes later in the pipeline.
}
}

关于asp.net-mvc - 如何通过属性过滤器在 MVC 中设置 Razor 布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047810/

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