在渲染 _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 数据进行相应处理。
是否可以在呈现 _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 数据进行相应处理。