【发布时间】:2012-07-18 09:55:14
【问题描述】:
基本上,我想为每个请求注入一些数据到 ViewData/ViewBag 中。
【问题讨论】:
标签: c# asp.net-mvc-3 django-middleware
基本上,我想为每个请求注入一些数据到 ViewData/ViewBag 中。
【问题讨论】:
标签: c# asp.net-mvc-3 django-middleware
在 ASP.NET MVC 中,这将是一个 action filter。如果您想在全球范围内进行,您可以将其注册为global action filter。这样,它将应用于所有控制器操作,因此您无需单独装饰它们。
所以你的过滤器可以这样定义:
public class GlobalViewBagInjectorActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.Controller.ViewBag.Foo = "bar";
}
}
并在Global.asax 的RegisterGlobalFilters 方法中注册:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new GlobalViewBagInjectorActionFilter());
}
现在您可以在所有视图中使用ViewBag.Foo 属性。
但在大多数情况下,Child Actions 比 ViewBag 更好,因为它们允许您传递强类型的视图模型,而不是依赖于弱类型的 ViewBag 和一些魔术字符串。
【讨论】: