2

この例の「ルックアップ」IList<string>は州の略語です。通常、ドメイン モデル POCO にはこれらのオプションは含まれません。ViewModel は通常、元のドメイン モデルと Lookup オブジェクトの両方を参照してこの責任を負いますが、ドメイン モデルがネストされていて、MVC テンプレートを使用している場合はどうなりますか (元のモデルのルート プロパティにアクセスできないでしょうか?

テンプレートの 1 つのオブジェクトにルックアップを含め、別のオブジェクトにモデルを含める方法はありますか? ビュー内のそのテンプレートに固有のビューモデルをオンザフライでアセンブルすることは許可されていますか (そこからネストされたデータを含める必要があります)。ルックアップ値をプルダウンする静的メソッドは悪いと思います。

何か案は?

注(私の知る限り):

リポジトリのドメイン モデル POCO の構造は変わりません。たとえば、1 つのモデルに Customer オブジェクトと米国州の DDL オプションの両方が必要な場合、通常、Customer オブジェクトと Customer Lookup リストを参照する ViewModel があります。

ただし、ネストされたドメイン モデル (集約ルート) がある場合、ネストされたオブジェクトにはルックアップ リストを配置する場所がなく、MVC テンプレートはルート レベルのビュー モデル (ビュー モデルは部分モデル) にアクセスできません。

編集:

ViewModel のルート レベルに DDL リストを配置し、Customer オブジェクトに到達したら、ルート レベルの DDL リストと現在の Customer オブジェクトを参照してテンプレートに送信する新しい ViewModel を作成する方法はありますか? これにより、モデル内の重複データが排除され、すべてのビューに対して単一のモデルが使用されます。唯一の悪い点は、ビュー内のコントローラーのようなデータ アセンブリ コードです (これも同様に悪いことです)。

4

2 に答える 2

3

いくつかの提案。まず、ビューに個別のビュー モデルを使用します。ドメイン モデルを直接使用しないでください。これらのビュー モデルは、ビューに必要な追加データを運ぶことができ、また運ぶ必要があります。次に、 DisplayFor / EditorForのオーバーロードを使用して、追加のビュー データをテンプレートに渡すことができます。こうすることで、テンプレートを特定のドメイン モデルに固有にしながら、ビュー モデルの追加データにアクセスできます。

于 2010-08-24T18:49:59.920 に答える
1

状態の省略形のような静的で不変のリストの場合は、アプリケーション状態またはキャッシュ エントリを使用できます。これらのタイプのリストは、データベースから Application_Start にロードできます。

于 2010-08-24T18:45:38.933 に答える