2

以前にも同様の質問をしましたが、答えがありません。

渡されたモデルのリストまたは単一のモデルを表示できる汎用 mvc4 ビューを作成するにはどうすればよいですか。model は、渡されるものは何でも Person または Organization または Party のいずれかです。

4

4 に答える 4

4

お願い、それはやめて!!

オブジェクトの種類/オブジェクトのリストごとにビューを作成する必要があります。

ただし、要素を再利用することはできます。

  • サイトのレイアウトに共通部分 (メニュー、ヘッダー、フッターなど) を残す
  • オブジェクトの種類ごとにビューを作成する
  • リストの種類ごとにビューを作成します。このビューでは、オブジェクトのビューを部分ビューとして使用し、オブジェクトがリストにある回数だけレンダリングできます。

もう 1 つの可能性は、オブジェクトの種類ごとに「表示対象」のテンプレートを作成することです。オブジェクトの種類ごとにビューを定義し、それを特別なフォルダーに保存できます。Html.Displayテンプレートでまたはを使用するHtml.DisplayForと、表示するオブジェクトのタイプに応じて、システムが適切なテンプレートを選択してレンダリングします。(名前付きテンプレートを作成して、名前で選択することもできます)。この手法の紹介については、Brad Wilson によるこの優れた投稿を参照してください

ただし、「一般的なビュー」を作成しないでください。これにより複雑さが増します(リストか単純なオブジェクトかを確認し、オブジェクトのタイプを取得し、表示方法を選択して表示します)。説明したように要素を再利用し、オブジェクトまたはオブジェクトのリストごとに表示するビューをコントローラーに決定させることで、非常に単純なビューを作成できます。または、テンプレートを使用します。このようにして、システムの保守が容易になり、複雑さが増したためにエラーが発生しにくくなります (同じテンプレートを常に変更する必要はありませんが、コードがほとんどない新しいテンプレートを追加する必要があります)。

私が理解できないのは、なぜ単純なビューが必要なのかということです。その理由は何ですか?

于 2013-07-10T10:52:07.253 に答える
1
@model MyViewModel<IViewModel>

このようなモデルを定義すると、次のエラーが発生します。

「/」アプリケーションでサーバー エラーが発生しました。


ディクショナリに渡されたモデル アイテムのタイプは ですMyViewModel\'1[Person]が、このディクショナリにはタイプ のモデル アイテムが必要MyViewModel'1[IViewModel]です。

于 2015-09-14T12:27:15.823 に答える
1

Generic View を実現するには 以下のコードを使用します。dynamic は、任意のモデルを受け入れる組み込みのキーワードです。私にとってはうまくいきました

@model dynamic また @model IEnumerable<dynamic>

于 2020-03-31T11:12:35.597 に答える