1

子 _DetailsViewModel のインスタンスを含む OrderViewModel があります。OrderViewModel には注文ヘッダー情報があり、_DetailsViewModel には注文詳細情報が保持されます。別々のモデルであるにもかかわらず、どちらも同じ単一のデータ ソース (Orders テーブル) を持っています。詳細が独自のビュー モデルにある理由は、それらのフィールドが同じ視覚的配置で別のビューで再利用されるためです。そのため、必要に応じて再利用できるように部分ビューに配置しています。これが私のメインと子のビューモデルのアイデアです:

public class OrderViewModel
{
    public string OrderNum  { get; set; }
    public string CustonerName{ get; set; }
    public double SalesPrice{ get; set; }
    public _Details Details { get; set; }
}

public class _DetailsViewModel
{
    public string PhoneNum { get; set; }
    public string ItemNum { get; set; }
    public double Quantity { get; set; }
    public string PayMethod{ get; set; }
    public string Comments { get; set; }
}

コントローラー内で、Orders テーブルからすべてのデータを返し、Order エンティティのリストを返すサービスを呼び出します。

orderService = new OrderService();
var orders = orderService.GetOrderInfo(StoreNum);

そこから、Omu.ValueInjecter を使用して結果をメインのビュー モデルに挿入します。

var orderViewModel = orders
                    .Select(x => new                              
                      OrderViewModel().InjectFrom(x)).Cast<OrderViewModel>()
                    .ToList();

return View(orderViewModel);

メインの Order View 内から Partial View に渡すことができるように、_Details モデルも入力する必要があります...以下のように:

@Html.Partial("_OrderDetails", Model._Details)

メインの注文モデルにすでにデータを入力している単一のサービス呼び出しから _Details モデルにデータを入力する方法はありますか? _Details プロパティをメインの注文ビューに追加し、注文ビューを繰り返して、対応する _Details モデルの各フィールドを手動で設定する必要がありますか? 確かに私は何かが欠けています。

ありがとう...

4

1 に答える 1

2

最初にエンティティをデータベースから移動します。そのようにして、クエリ リクエストを 1 つだけ発行します。

// apply any filter(s) needed here.
var orderList = orders.ToList();

// then do injecting using the "cached" orders 
var orderViewModel = orderList
    .Select(x => new OrderViewModel().InjectFrom(x))
    .Cast<OrderViewModel>()
    .ToList();

// then inject into your details model
var detailsModel = orderList
    .Select(x => new _DetailsViewModel().InjectFrom(x))
    .Cast<_DetailsViewModel>()
    .ToList();

そして、もしよろしければ、アンダースコアを削除し_DetailsViewModelて命名基準を作成することをお勧めします。

アップデート:

その後、detailsModel を orderViewModel に追加して Order View に渡すにはどうすればよいですか?

OrderViewModel次のようにインスタンスに設定するだけです。

orderViewModel.Details = detailsModel ;

次に、ビューに戻り、そこでorderViewModel自分のことを行います。

@Html.Partial("_OrderDetails", Model.Details)
于 2013-04-16T04:52:56.883 に答える