2013-04-16 40 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

相关问题