2009-08-29 17 views
0

アクションがビューを返すたびに実行したいロジックがあります。ロジックは、アクションとコントローラの名前を知る必要があります。現時点では、私は各コ​​ントローラ/アクションでフィルタを使って作業していますが、時々、このロジックを使用するビューを返すすべてのアクションが必要です。だからどこにでもフィルタを追加することは、私が避けることができる余分な仕事のようです。フィルタ内からアクションやコントローラ名を知っているAsp.net Mvc:各コントローラ/アクションでロジックを呼び出す

答えて

2

あなたは、コントローラ内のすべてのアクションのための一般的な動作を提供するためにOnActionExecutingまたはOnActionExecutedメソッドをオーバーライドすることができます。複数のコントローラーに適用する場合は、このオーバーライドを使用してベースコントローラークラスを作成し、このコントローラーをベースコントローラーから派生させる必要があります。

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ... common code here ... 
} 

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    if (filterContext.Result is ViewResult) 
    { 
     ... common code here ... 
    } 
} 
+0

すべてのコントローラをその基本クラスから派生させる方法はありますか? – Pickels

+0

それらはすべてコントローラから今派生しています。新しいコントローラを作成するときに基本クラスを変更するだけです。 – tvanfosson

+0

しかし、すでに20台のコントローラを持っているプロジェクトがあればどうでしょうか?それらを手動ですべて更新するのですか、またはすべてのコントローラに新しいベースコントローラから1か所に派生させるよう伝えることはできますか? – Pickels

1

String ActionName = filterContext.ActionMethod.Name; 
String ControllerName = filterContext.Controller.ToString(); 

すべてアクションにフィルタを適用する基本ControllerクラスにOnActionExecutingを定義し、それをサブクラス化します。私は唯一のビューを返すアクションをフィルタリングする方法についての具体的なquestionを求めてきました

...

関連する問題