5

新しい ASP .NET MVC フレームワークについて学習しようとしていますが、UserControls を使用するためのベスト プラクティスを知りたいです。

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

UserControls がどのようにパターンに適合するのか理解できない例を挙げます。

最新のタグを表示する UserControl があります (StackOverflow のように)。StackOverflow とは異なり、この UserControl をすべてのページに表示したいと考えています。ビューや詳細など、いくつかの質問ビューからのアクションを処理することを目的とした QuestionController というコントローラーがある場合、これは QuestionController のデータを取得してから UserControl に渡す必要があることを意味しますか?

SearchController などの別のコントローラーを作成した場合、同じ機能を複製して、最新のタグを再度パーシャルに渡す必要があります。これは、2 つの異なるコントローラーが、本来意図されていなかった余分なことを行っているということではないでしょうか?

4

3 に答える 3

4

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

このすべてにおいて、UserControl のデータは呼び出されるアクションとは無関係であると想定しています。依存関係がある場合は、ロジックをクラス (または、おそらく Strategy を使用するクラス) にプッシュし、(OnActionExecuting をオーバーライドして) 各アクションまたはコントローラーでデータの生成を明示的にするのがおそらく最善です。

于 2009-04-01T11:58:19.500 に答える
4

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

于 2010-04-28T05:24:27.170 に答える
-1

モデル クラスを階層に配置することも検討できます。上位クラス (または上位クラスの 1 つ) には、広範なユーザー コントロールに必要なデータが含まれます。次に、これらの一般的に使用されるデータを基本コントローラー クラスにロードできます。

于 2009-04-01T12:05:31.650 に答える