2009-06-08 3 views
7

すべてのViewModelがクラスBaseViewModelを継承する強く型付けされたビューを使用します。型付きビューを使用するときにActionFilterAttributeでモデルデータを設定する方法

すべてのコントローラを装飾するActionFilterでは、私はモデルを使用します。

今私は、このようにアクセスすることができます

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ViewModelBase model = (ViewModelBase)filterContext.ActionParameters["viewModel"]; 
     base.OnActionExecuting(filterContext); 
    } 

問題は、私はキー「ViewModelに」を知っている必要があること、です。私のコントローラで私が使用しているため、キーは、ViewModelにある:

リターン ビュー( "MYVIEW"、 ViewModelに)

モデルをアクセスもするより安全な方法はありますか?

答えて

14

OnActionExecutingは、アクションが実行される直前に動作します。したがって、Modelはnullに設定されます。あなたはOnActionExecutedであなたのViewDataを(またはViewData.Model)にアクセスできます。

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var model = filterContext.Controller.ViewData.Model as YourModel; 

    ... 
} 

希望これは

+0

これは意味があります。フィルタの一部はルートから値にアクセスでき、アクションが実行される前に知る必要があります。私はまだこの部分をOnActionExecutingに持っています。残りはOnActionExecutedになりました。 –

4

することができますユーザーもこのOnActionExecutingで役立ちます:

BaseModel model = filterContext.ActionParameters.SingleOrDefault(m => m.Value is BaseModel).Value as BaseModel; 

希望これは

1

を支援しますこれは古い質問ですが、OnActionExecuting中にモデルにアクセスできるようになりました。

var model = filterContext.ActionParameters["model"] as CustomerModel; 
関連する問題