2

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

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

4

2 に答える 2

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); %>

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

于 2009-08-10T14:07:46.830 に答える
1

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

于 2009-08-10T14:31:57.760 に答える