ASP .NET MVC正しいユーザーコントロールのアーキテクチャ
-
22-08-2019 - |
質問
私は、新しいASP .NET MVCフレームワークを学ぶためにしようとしているとのUserControlを使用するためのベストプラクティスを知っていただきたいと思います。
私はあなたの部分として、ユーザーコントロールのレンダリングし、コントローラからそれらにデータを渡すことができることを理解しています。理想的には私はそれが、これはMVCのルールを破る誘惑を作成して、ファイルの後ろにコードを持っていない理にかなっていると思うだろう。
私はユーザーコントロールがパターンに適合方法を理解していない例をあげるます。
私が示してユーザーコントロールを持っています ずっと上のような最新のタグ( スタックオーバーフロー)。 StackOverflowの私とは違って 上でこのユーザーコントロールを表示します 私のすべてのページ。私が持っている場合 コントローラはQuestionControllerを言います そこからアクションを処理するためのものです 例えば、いくつかの質問を望みますビューと 詳しくは、これは私がフェッチする必要がどういう意味します QuestionController内のデータと その後、ユーザーコントロールに渡す?
私は別のコントローラを作成する場合と言います SearchControllerその後、私がしなければなりません に同じ機能を複製 最新のタグがに渡すために取得 再び部分。これは、ということを意味するものではありません 2つの異なるコントローラがやっています 彼らはありませんでした余分なもの 元々行うためのもの?
解決
ユーザーコントロールは、すべてのページに表示された場合、これはあなたのコントローラのすべて、そこからベースコントローラを使用することです対処するための一つの方法は、導出とOnActionExecutingメソッドをオーバーライドし、そこにロジックを置くことによって、ユーザーコントロールのためのViewDataを生成します。ユーザーコントロールがあまり普及しているが、それでも頻繁にサイト全体で使用する場合は、ActionFilterAttributeを拡張し、あなたのフィルタが必要なデータを生成する可能性があります。この属性は、ユーザーコントロールを使用するビューを生成コントローラやアクションを飾るために使用することができます。
私は、ユーザーコントロールのためのデータが呼び出されたアクションとは無関係であることを、このすべてにと仮定しています。依存関係があれば、それは(おそらく戦略を使用して、またはクラス)クラスにロジックを押すと(OnActionExecutingをオーバーライドを経由して)各アクションやコントローラ内の明示的なデータの生成を行うことがおそらく最善です。
他のヒント
また、ASP.NET MVC 2で、あなたは今、データを取り込むことができる全く新しいコントローラのアクションを呼び出すためにRenderActionを使用することができます。これは、コードがはるかにモジュラーなり、データがどこから来ていることがより明確である。
また、階層でモデルクラスを置くことを検討することができます。アッパークラス(または上位クラスのいずれか)が、あなたの普及ユーザーコントロールのために必要なデータが含まれています。そして、あなたは基本コントローラクラスにこれらの一般的に使用されるデータを読み込むことができます。