3

私がオンラインで見たサンプルのほとんどは、単一のエンティティ クラスで CRUD を示しています。

CRM アプリケーションを作成し、ビューの 1 つに顧客情報を読み取り専用モードで表示し、同じページに連絡先、メモ、添付ファイル、住所を表示する必要がある場合、コントローラーはこれらの異なるエンティティをどのようにビューに渡す必要がありますか?
他のさまざまなエンティティのコンテナとなる別のモデル クラスを作成し、そのモデル クラスにさまざまなエンティティを設定してビューに戻す必要があります。

別のシナリオでは、Customer エンティティを編集モードで表示したいとします。ビューには、Customer Active Status、Customer StateCode、Customer Satisfaction ドロップダウンのドロップダウンがあります。これらの各ドロップダウンには、バインドされた他のエンティティ コレクションがあります。したがって、このシナリオでも、コントローラーは Customer エンティティだけでなく、これらすべてのエンティティを持つモデルをどのように返す必要がありますか。

私は ViewModel パターンを読み続けていますが、これが進むべき道かもしれないと思いますが、より多くのガイダンスとポインタをいただければ幸いです。

4

1 に答える 1

2

その通りです。ViewModelページに必要なオブジェクトを表す を作成します。

最初のシナリオは次のようになります。

public class CustomerInformationViewModel
{
    IEnumerable<Contact> Contacts { get; set; }
    IEnumerable<Note> Notes { get; set; }
}

これらをコントローラーに入力してから、ビューでアクセスします。

@foreach (var contact in Model.Contacts)
{
    @Html.DisplayFor(c => c.Name)
}

2 番目のシナリオでも、まったく同じです。顧客のプロパティにバインドしたいが、ドロップダウン リスト用の追加のコレクションも必要です。

public class CustomerEditViewModel
{
    Customer Customer { get; set; }
    IEnumerable<Status> StatusOptions { get; set; }
    IEnumerable<StateCode> StateCodeOptions { get; set ; }
}

ModelStateコントローラーでコレクションが無効であることが判明した場合は、これらのコレクションをコントローラーに再設定する必要があることに注意してください。

于 2012-09-29T15:44:54.087 に答える