2009-07-27 25 views
2

BaseControllerのOnActionExecutingメソッドで、他のすべてのコントローラが基になっていることがいくつかあります。OnActionExecutingの代わりに何を使用しますか? ASP.NET MVC

ViewDataに変数を追加するなどの簡単な作業をしています。私のビューの「ほぼすべて」が必要になり、コントローラが使用するいくつかのプロパティを設定します。

このバグは私にとっては必要のない行動でもこの作品がされています。この仕事をより効率的に行うためのより良い場所がありますか?私が今やっていること(つまりDBアクセスなど)より少し重いことが必要な場合に備えて。

更新:私は特に、典型的なコントローラのシナリオを参照しています。単純にビューを表示するアクションがいくつかあります。フォーム提出を行い、仕事をし、別の行動にリダイレクトする少数の人。

この場合、OnActionExecutingメソッドで行われた作業を使用するビューを表示するアクションが必要です。しかし、フォームの提出を受け入れるアクションは、OnActionExecutingで行われている作業が使用されていないため、不要な処理時間が追加されるだけです。

多分私はそれをとてもうまく説明していないかもしれません...今はっきりしていることを願っています。

TIA!

答えて

3

ホワイトリストを作成するアクションよりもアクションをブラックリストに追加する方が簡単です(このロジックを実行しないアクションの属性を付けることで)[SuppressWhateverLogic]属性を作成し、ブラックリストに追加するメソッドに適用できます。次に、OnActionExecuting()メソッドを変更して(ActionExecutingContext.ActionDescriptor.IsDefined()を介して)この属性を探し、その属性が存在する場合はロジックから抜け出す。

アクションをホワイトリストに追加する方が簡単な場合は、Controller.OnActionExecuting()のロジックを移動し、ActionFilterAttributeをサブクラス化してカスタム[MyLogic]フィルタを作成します。ロジックをMyLogicAttribute.OnActionExecuting()に追加し、[MyLogic]で必要なメソッドにロジックを関連付けます。

+0

私は自分のコードにアクセスできる場所にいませんが、合理的な解決策のように聞こえます。ありがとうございました! – Chaddeus

0

BaseControllerから派生した2番目の「AdvancedBaseController」を作成しますか?

+0

私の典型的なコントローラでは、単にビューを表示するアクションがあります。私はBaseControllerで実行している作業を使用したいと思っています。別のアクションにリダイレクトする前にバックエンドで作業を行うための投稿を受け取るアクションなど、いくつかのアクションがあります。 OnActionExecutingに参加していないメンバーだけを除外したいと思います。データを必要としないリクエストに処理時間を追加するだけで済みます。 – Chaddeus

関連する問題