2016-08-21 5 views
0

asp.net mvcビューの内部では、ビューで返されるモデルにアクセスできます。ビューの外にあるビューのモデルを取得する方法

ビュー自体ではなく、コントローラメソッドが完了した後に実行される別のメソッドであれば、レンダリングされている現在のビューの現在のモデルを取得するにはどのような[静的]メソッドがありますか?

私はすべての標準オブジェクトにアクセスすることができます:セッション、要求、応答、など

を私は、セッション変数をロードすることによって、周りに働いたが、私はフレームワークがすでにそれを保持している場合は、セッションを使用して好きではありません。

+0

いつこのメソッドが呼び出されますか? – Shyju

+0

これはSiteMap.SiteMapResolveイベントのイベントハンドラです。ビュー内のコードが実行された後、すべてがブラウザに返される前に発生します。 – toddmo

+0

カスタムActionFilterAttributeを作成します。http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs –

答えて

0

MVCリクエストパイプラインで実行されるアクションフィルタを作成できます。アクションメソッドの実行後にいくつかのコードを実行する場合は、OnActionExecutedメソッドをオーバーライドすることができます。

public class MyCustom : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    {    
     var viewModel = filterContext.Controller.ViewData.Model; 
     var response = filterContext.HttpContext.Response; 
     var viewBag = filterContext.Controller.ViewBag; 

     // Use any of these as needed 

     base.OnActionExecuted(filterContext); 
    } 
} 

あなたはすべての要求のためにこれをしたい場合、あなたはRegisterRoutesメソッド内GlobalFiltersコレクションにこのフィルタを登録することができます。

GlobalFilters.Filters.Add(new MyCustom()); 
関連する問題