2009-04-01 21 views
5

私は新しいASP .NET MVCフレームワークを学びたいと思っており、UserControlsを使用するためのベストプラクティスを知りたいと思います。ASP .NET MVC正しいUserControlのアーキテクチャ

UserControlを部分としてレンダリングし、コントローラからデータを渡すことができます。理想的には、これはMVCルールを破る誘惑を生み出すため、ファイルの背後にコードを持たないことが理にかなっていると思います。

UserControlsがパターンにどのように適合しているかわかりませんが、ここでは例を挙げます。

私は(あまり StackOverflowの上など) 最新のタグを示してユーザーコントロールを持っています。 StackOverflowとは異なり、私は このUserControlを のすべてのページに表示します。私が コントローラを持っている場合は、QuestionController と言って、 のアクションを処理することを意図しています。ビューと 詳細は、私は QuestionControllerのデータを取得し、 それをUserControlに渡す必要がありますか?

私は別のコントローラを作成する場合 SearchControllerが、私は には に同じ機能を複製するだろうと言うが、再び部分 に渡す最新のタグを取得します。これは、2つの異なるコントローラが を実行していることを意味していません 余分なものは、 はもともとするつもりでしたか?

答えて

4

ユーザーコントロールは、すべてのページに表示された場合は、この問題に対処するための一つの方法は、あなたのコントローラのすべての派生とOnActionExecutingメソッドをオーバーライドしてロジックを置くことによって、ユーザーコントロールのためのViewDataを生成し、そこからベースコントローラを使用することですそこ。 UserControlの普及率は低いが、サイト全体で頻繁に使用されている場合は、ActionFilterAttributeを拡張し、必要なデータをフィルタに生成させることができます。この属性は、UserControlを使用するビューを生成するコントローラまたはアクションを装飾するために使用できます。

私は、UserControlのデータが呼び出されるアクションとは独立していることを前提としています。依存関係がある場合は、ロジックをクラス(またはストラテジを使用しているクラス)にプッシュし、各アクションまたはコントローラで(OnActionExecutingをオーバーライドすることによって)データの生成を明示することが最善の方法です。

-1

モデルクラスを階層に配置することも考えられます。上位クラス(または上位クラスの1つ)には、普及しているユーザーコントロールに必要なデータが含まれます。次に、これらの一般的に使用されるデータをベースコントローラークラスにロードできます。

4

また、ASP.NET MVC 2では、RenderActionを使用して、データを取得できる全く新しいコントローラアクションを呼び出すことができます。これにより、コードがよりモジュラー化され、データの出所が明確になります。

+0

私は必要なもののように聞こえます! – Alex