基本上,我想为每个请求注入一些数据到 ViewData/ViewBag 中。
问问题
1004 次
1 回答
2
在 ASP.NET MVC 中,这将是一个操作过滤器。如果您想在全局范围内执行此操作,可以将其注册为全局操作过滤器。这样,它将适用于所有控制器操作,因此您无需单独装饰它们。
所以你的过滤器可以这样定义:
public class GlobalViewBagInjectorActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.Controller.ViewBag.Foo = "bar";
}
}
并RegisterGlobalFilters
在您的方法中注册Global.asax
:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new GlobalViewBagInjectorActionFilter());
}
现在,在您的所有视图中,您可以使用该ViewBag.Foo
属性。
但在大多数情况下,子操作是一个更好的选择,ViewBag
因为它们允许您传递强类型的视图模型,而不是依赖于弱类型的 ViewBag 和一些魔术字符串。
于 2012-07-18T09:56:55.713 回答