我在查看模型时遇到了一些麻烦,它倾向于引导我误入歧途,并在查看它的自我和意大利面条代码中进行计算,或者我回到ViewBag上.我听说过这两种方法都是不正确的.
我真的只使用数据库与MVC,所以我的所有网站都有.EDMX作为他们的模型.下面的代码返回一个IEnumerable Orders列表,它工作正常,但我应该如何将总计相加,以便我可以在列表的末尾显示它们?目前我在View中的foreach语句中这样做.
public ActionResult SalesAll()
{
var orderproductvariants = db.OrderProductVariants.Include("Order")
.Include("ProductVariant")
.Include("ProductVariant.Product")
.Where(x => x.Order.PaidDateUtc != null)
.OrderByDescending(x => x.PriceInclTax);
return View(orderproductvariants.ToList());
}
Run Code Online (Sandbox Code Playgroud)
我建议为每个需要任何类型数据的视图创建一个ViewModel.
在这种情况下,我创建:
public class SalesAllViewModel
{
IEnumerable<OrderProductVariant> _orderProductVariant;
public SalesAllViewModel(IEnumerable<OrderProductVariant> orderProductVariant)
{
this._orderProductVariant = orderProductVariant;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要基于传递给View的值的逻辑,请在模型中更改它们.
public int SumOfSomethingInOrderProductVariant(int id)
{
return this._orderProductVariant
.Where(opv.ID == id)
.Sum(opv => opv.IntValue);
}
Run Code Online (Sandbox Code Playgroud)
这意味着逻辑在视图中的所有数据中都是一致的.如果你有多个区域使用视图中的某些逻辑显示相同的值,那么很容易忘记并且必须复制并粘贴(yeeesh)其他值.
使用ViewBag或ViewData通常是不受欢迎的,因为没有人可以告诉控制器或视图中的真实情况,所有魔法都隐藏在视图(包/数据)中.
更新1
ViewModel(仅仅是MVC技术描述中的模型)与数据访问无关.它只是一个与实体框架,Oracle,XML或任何其他数据存储/检索技术无关的POCO.ViewModel背后的目标之一是将视图与数据源分离.
现在更加困惑的是代码第一种方法即.没有精心打造的数据库???
此问题与ViewModels无关.这也是一个主观问题,所以没有充分的理由回答它.
使用我正在使用的数据库,我似乎不需要所有的Include("Order")
既然你提到了一个EDMX文件,我可以假设你在谈论实体框架.您如何使用Entity Framework取决于您.如果出于性能原因需要包含,那么如果您不需要它提供的数据,请不要使用它.无论哪种方式,它都与如何在MVC中使用ViewModel无关.
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |