在渲染 _layout.cs 文件之前设置 ViewBag

Set ViewBag before rendering _layout.cs file

是否可以在呈现 _layout.cs 文件之前设置一个 ViewBag 属性?我需要 ViewBag 来包含一个列表,我可以用它来呈现 _layout。我怎样才能做到这一点?

我听说过 StartUp.cs,但我认为这是针对 OWIN 的,不能在这里使用,对吗?

您可以创建自定义 ActionFilter 来设置 ViewBag 属性。

public class CustomViewBagActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // either inject a property or use the filterContext
        //to get what data you need to use to set the ViewBag

        dynamic ViewBag = filterContext.Controller.ViewBag;
        ViewBag.Test = "test";
    }
}

然后你可以在 FilterConfig.cs:

中像这样全局应用它
filters.Add(new CustomViewBagActionFilter());

或者你可以用它装饰你的控制器或动作:

[CustomViewBagActionFilter]
public class HomeController : Controller

然后您可以在 _Layout.cs 文件中访问 ViewBag 属性。只需确保检查 null 并根据您的 ViewBag 数据进行相应处理。