2011-01-11 8 views
7

winformsとASP.netの両方で.netと数年間働いているので、私は今MVCに入り始めています。私の主な混乱の1つは、再利用可能な「コンポーネント」の概念で、Webフォームのユーザーコントロールの概念に似ています。ASP> net MVC再利用可能な部分

たとえば、私はサイトのメンバーエリア内にいくつかの「ウィジェット」を持っています。その1つは、ログインしているユーザーのアカウントマネージャの詳細です。しかし、これを部分的に作成することはできますが、ページがロードされるときにViewModel/Viewデータの一部としてデータを渡す必要があります。私はこのウィジェットをいくつかの異なるセクションで使いたいと思っています。つまり、データをさまざまなコントローラに渡すためにコードを記述する必要があります。これはDRYの原則に違反しているようですが、ここで何か不足していますか?私は理想的には、すべてのページで使用できる1つの部分にカプセル化されるすべてのものが好きです。多くのロジックなしでシンプルなコントロールのために

1)、あなたがコントロールのカスタムビューモデルの新しいインスタンスを作成することができます:

答えて

4

次の3つの方法を行くことができ Html.RenderPartial(「YourControl」、新YourControlViewModel() {Param1 = "value1"、Param2 = Model.AnotherValue});

2)コントロールのバックエンドロジックが必要な場合は、 Html.RenderAction( "ActionName"、 "SomeControllerName"、RouteValuesDictionary);を使用できます。 これは、標準のコントローラーアクションを呼び出し、ビューを使用して結果の出力をページに挿入し直します。コントローラーメソッドに[ChildActionOnly]属性を追加して、メソッドがHtml.RenderPartialからのみ使用できるようにすることができます。これはMVCの原則に少し違反しています(ビューはコントローラを呼び出すべきではありません)が、ウィジェットには最適であり、Ruby on Railsの世界ではほとんど問題なく使用されています。あなたは...などを計算し、カスタム日付の書式設定などのタスクのためのカスタムHTMLヘルパーを作成します)Haacked

3から、あなたの場合は

を素晴らしい記事をチェックすることができ、私は数2を選ぶだろう。

+0

それはかなり意味があります - 私は単純なケースでは私はどちらも使用できないと思います。 ViewModelコンストラクタから現在ログインしているユーザを取得します.2ウェイインタラクションが必要な場合はno.2を取得します。 – Macros

+0

ビューモデルにユーザーのIDがある場合、ルート値に渡すことができます(2)を使用してデータをキャッシュします。もう1つの選択肢は、現在のログインしているユーザーをセッションからロードすることです。これは非常に簡単ですが、いくつかの原則に違反します。あなたがそれを好きなら、答えをマークしてください、ありがとう。 – jhexp

関連する問題