0

基本上,我想为每个请求注入一些数据到 ViewData/ViewBag 中。

4

1 回答 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 回答