以前にも同様の質問をしましたが、答えがありません。
渡されたモデルのリストまたは単一のモデルを表示できる汎用 mvc4 ビューを作成するにはどうすればよいですか。model は、渡されるものは何でも Person または Organization または Party のいずれかです。
以前にも同様の質問をしましたが、答えがありません。
渡されたモデルのリストまたは単一のモデルを表示できる汎用 mvc4 ビューを作成するにはどうすればよいですか。model は、渡されるものは何でも Person または Organization または Party のいずれかです。
お願い、それはやめて!!
オブジェクトの種類/オブジェクトのリストごとにビューを作成する必要があります。
ただし、要素を再利用することはできます。
もう 1 つの可能性は、オブジェクトの種類ごとに「表示対象」のテンプレートを作成することです。オブジェクトの種類ごとにビューを定義し、それを特別なフォルダーに保存できます。Html.Display
テンプレートでまたはを使用するHtml.DisplayFor
と、表示するオブジェクトのタイプに応じて、システムが適切なテンプレートを選択してレンダリングします。(名前付きテンプレートを作成して、名前で選択することもできます)。この手法の紹介については、Brad Wilson によるこの優れた投稿を参照してください。
ただし、「一般的なビュー」を作成しないでください。これにより複雑さが増します(リストか単純なオブジェクトかを確認し、オブジェクトのタイプを取得し、表示方法を選択して表示します)。説明したように要素を再利用し、オブジェクトまたはオブジェクトのリストごとに表示するビューをコントローラーに決定させることで、非常に単純なビューを作成できます。または、テンプレートを使用します。このようにして、システムの保守が容易になり、複雑さが増したためにエラーが発生しにくくなります (同じテンプレートを常に変更する必要はありませんが、コードがほとんどない新しいテンプレートを追加する必要があります)。
私が理解できないのは、なぜ単純なビューが必要なのかということです。その理由は何ですか?
@model MyViewModel<IViewModel>
このようなモデルを定義すると、次のエラーが発生します。
「/」アプリケーションでサーバー エラーが発生しました。
ディクショナリに渡されたモデル アイテムのタイプは ですMyViewModel\'1[Person]
が、このディクショナリにはタイプ のモデル アイテムが必要MyViewModel'1[IViewModel]
です。
Generic View を実現するには 以下のコードを使用します。dynamic は、任意のモデルを受け入れる組み込みのキーワードです。私にとってはうまくいきました
@model dynamic
また
@model IEnumerable<dynamic>