2009-08-10 9 views
2

私は必要な部分ビューのパスリストを渡して、ビューのそれぞれにRenderPartialを呼び出して、ビューに部分ビューを動的にロードしようとしています。これはトリックを行うようだ。モデルをパーシャルビューに渡そうとすると、問題が発生します。私はそれらを動的にロードしているので、特定の部分ビューにどのモデルを渡すべきか正確には分かりません。私はすべての可能なオブジェクトを設定する必要はなく、モデルを動的にロードするために各部分ビューの設定ルックアップを使用してリフレクションを使用することを検討しています。私は、私のために適切なモデル値を自動的に設定するActionFilterを追加することも検討していましたが、この実装でもReflectionを使用する必要がありました。誰にも他の提案はありますか?MVC - 部分的ビューを動的にロードする

私はMVCには表示されない通常のASP.NETユーザーコントロールについて迷っています。ユーザコントロールはデータ検索のために独自のロジックをカプセル化していましたが、MVCではメインコントローラがそれを知る必要があります。つまり、別のコントローラの部分ビューを使用する場合、コントローラはその部分ビューのモデルを取得する方法も知っている必要があります。私はここに何かを逃していますかありがとう。

答えて

4

説明することができるようにしたい場合は、Html.RenderAction()について読んでみるといいでしょう。これは多くの状況で便利ですが、 "純粋な" MVC(多分現実的なMVC)ではありません。

私は、部分的なビューを使用して異なる検索画面(検索提出ボタンは同じです)をロードする場合と同様の状況がありますが、フォームフィールドのみが異なります。

私は次のようにしています。共通基底クラスのコントローラでは、ジェネリック型のパラメータがあり、これをビューモデルオブジェクトに渡します(SearchObjectはオブジェクト型です)。

public abstract class SampleController<T> : Controller where T : new() 
public virtual ActionResult SearchForDocuments() 
     { 
      searchModel.SearchObject = // Create type of T; 
      // Some more code 
      return View("SomeView", searchModel); 
     } 

次に、厳密に型指定されたビューがあり、これはSearchObjectを部分ビューに渡します。

<% Html.RenderPartial(@"../Search/SearchCriteriaTemplates/" + /*Specific view name*/, Model.SearchObject); %> 

部分ビューは強く型付けされ、強く型付けされたモデルで何をするかを知っています。

+0

私はあなたのコードを見ましたが、流れを理解していません。小さな作業サンプルコードを投稿してください。ありがとう – Thomas

1

ロジックを持ち、Partials as stringを返すヘルパー関数を作成すると、結果が同じになることがあります。そして、RichardODが提案した仮想関数よりも移植性が高くなります。

関連する問題