gpt4 book ai didi

c# - 如何在 ASP.NET Core Razor Pages 中使用 _ViewStart 设置条件布局?

转载 作者:行者123 更新时间:2023-12-04 16:42:31 24 4
gpt4 key购买 nike

我想根据当前渲染的页面显示不同的布局。

我在网上找不到任何关于此的信息,但我觉得这应该是一个非常常见的用例。

我只有几页。我想为我的注册和登录页面分配独特的布局。

这是我到目前为止所得到的,但在这种情况下我无法使用 ControllerContext。

@{
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
dynamic Layout;
switch (controllerName)
{
case "Register":
Layout = "_RegisterLayout";
break;
case "Login":
Layout = "_LoginLayout";
break;
default:
Layout = "_Layout";
break;
}
}

enter image description here

最佳答案

我们最近遇到了类似的问题。我们决定为 ViewData 提供布局名称,方法如下。

Layout = (string)ViewData["LayoutName"] ?? "DefaultLayout";

这样您就可以使用操作更改布局,或者从 View 内部或使用操作过滤器。我将包含一个 Action 过滤器,它使用 Controller 名称执行以下操作,如您所问,然后您可以在全局注册该过滤器。


public class LayoutNameFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
var result = context.Result as ViewResult;
var controllerName = context.RouteData.Values["controller"].ToString();
switch (controllerName)
{
case "Register":
result.ViewData["LayoutName"] = "_RegisterLayout";
break;
case "Login":
result.ViewData["LayoutName"] = "_LoginLayout";
break;
default:
result.ViewData["LayoutName"] = "_Layout";
break;
}
}

public void OnActionExecuting(ActionExecutingContext context)
{
}
}

然后你可以通过像这样替换 services.AddMvc 来全局注册这个过滤器。

services.AddMvc(options =>
{
options.Filters.Add(new SampleFilter());
})

希望这对您有所帮助。

关于c# - 如何在 ASP.NET Core Razor Pages 中使用 _ViewStart 设置条件布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57024115/

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