2013-04-16 76 views
1

我有一個OrderViewModel,它包含一個子類_DetailsViewModel的實例。 OrderViewModel具有訂單標題信息,_DetailsViewModel包含訂單詳細信息。儘管是單獨的模型,但它們都具有相同的單一數據源..訂單表。細節在他們自己的視圖模型中的原因是這些字段在相同的視覺佈局中被重用在不同的視圖上,所以我將它們放在部分視圖中以根據需要重用。這裏是我的主,子視圖模型的想法:在MVC中加載子模型時遇到問題4

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表中返回的所有數據,並返回訂購實體列表的服務。

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); 

我還需要填充_Details模型,這樣我可以從我的主要訂單查看內傳遞到局部視圖...象下面這樣:

@ Html.Partial(「_訂單明細」, Model._Details)

有沒有一種方法可以從已經填充主訂單模型的單個服務調用填充_Details模型?我是否必須將_Details屬性添加到主Order View中,然後遍歷Order視圖以手動設置相應_Details Model的每個字段?當然,我錯過了一些東西。

謝謝...

回答

2

移動實體從數據庫的第一,以這種方式只發出一個查詢請求:

// 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作出命名標準。

UPDATE:

如何添加detailsModel到orderViewModel事後通過 的順序查看?

你只是單純地將它設置爲OrderViewModel實例,像這樣:

orderViewModel.Details = detailsModel ; 

然後回到orderViewModel你的觀點,做你的事情出現了:

@Html.Partial("_OrderDetails", Model.Details) 
+0

感謝。如何將detailsModel添加到orderViewModel,然後傳遞給Order View? orderViewModel.Details = detailsModel ??? 或者是否需要迭代以添加每個訂單的詳細信息?如果你能展示一些示例代碼,我會非常感激。 – user2167861

+0

「OrderViewModel」中的屬性應該是這樣的:public _DetailsViewModel Details {get;組; }'? –

+0

是的。其實這只是一個錯字。它在我的實際代碼中設置爲_DetailsViewModel。 – user2167861

相關問題