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 に答える