在MVC 4中加载子模型时遇到麻烦



我有一个OrderViewModel,它包含子_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表中的所有数据并返回Order Entities列表。
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);

我还需要填充_Details模型,以便我可以将它从主订单视图传递给部分视图…像下图:

@Html。部分("_OrderDetails",Model._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();

还有一个小建议,如果我可以的话,删除_DetailsViewModel的下划线以使命名标准。

更新:

我如何将detailsModel添加到orderViewModel之后传递到订单视图?

您只需将其设置为OrderViewModel的实例,如下所示:

orderViewModel.Details = detailsModel ;

然后返回orderViewModel到您的视图并在那里做您的事情:

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

相关内容

  • 没有找到相关文章

最新更新