Asp.net mvc 4 在MVC4中加载子模型时出现问题

Asp.net mvc 4 在MVC4中加载子模型时出现问题,asp.net-mvc-4,viewmodel,partial-views,valueinjecter,Asp.net Mvc 4,Viewmodel,Partial Views,Valueinjecter,我有一个OrderViewModel,其中包含一个child\u DetailsViewModel的实例。OrderViewModel包含订单标题信息,_DetailsViewModel包含订单详细信息。尽管是单独的模型,但它们都有相同的单一数据源..Orders表。细节在它们自己的视图模型中的原因是这些字段在不同的视图中以相同的视觉排列重用,因此我将它们放在局部视图中,以便根据需要重用。以下是我的主视图和子视图模型的想法: public class OrderViewModel { p

我有一个OrderViewModel,其中包含一个child\u DetailsViewModel的实例。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表中的所有数据,并返回订单实体列表

orderService = new OrderService();
var orders = orderService.GetOrderInfo(StoreNum);
在这里,我使用Omu.valueinjector将结果注入到主视图模型中

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

return View(orderViewModel);
var orderViewModel=订单
.选择(x=>new
OrderViewModel().InjectFrom(x)).Cast()
.ToList();
返回视图(orderViewModel);
我还需要填充_Details模型,这样我就可以从我的主订单视图中将其传递到部分视图……如下所示:

@Html.Partial(“\u OrderDetails”,Model.\u Details)

是否有方法从已经填充主订单模型的单个服务调用填充_Details模型?我是否必须将_Details属性添加到主订单视图中,然后迭代订单视图以手动设置相应的_Details模型的每个字段?我肯定错过了什么


谢谢…

首先将实体移出数据库,这样您只需发出一个查询请求:

// 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();
然后将
orderViewModel
返回到您的视图并在那里执行操作:

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

谢谢之后如何将detailsModel添加到orderViewModel以传递到Order视图?orderViewModel.Details=detailsModel???或者我需要迭代来添加每个订单的详细信息吗?如果您能展示一些示例代码,我将不胜感激。
OrderViewModel
中的属性应该是:
public\u DetailsViewModel Details{get;set;}
?是的。实际上,这只是一个打字错误。在我的实际代码中,它被设置为_DetailsViewModel。
@Html.Partial("_OrderDetails", Model.Details)