MVC 视图模型
本文关键字:模型 视图 MVC | 更新日期: 2023-09-27 18:35:08
我在了解视图模型时遇到了一点麻烦,它往往会让我误入歧途,并在视图本身中进行计算,因此意大利面条代码,或者我回到 ViewBag。我听说这两种事情都是不正确的做事方式。
我真的只先在 MVC 中使用数据库,所以我的所有网站都有一个.EDMX 作为他们的模型。下面的代码返回一个 IE无数的订单列表,它工作正常,但是我应该如何加和总计以便我可以在列表末尾显示它们?目前,我在视图中的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());
}
我建议为每个需要任何类型的数据的视图创建一个 ViewModel。
在这种情况下,我将创建:
public class SalesAllViewModel
{
IEnumerable<OrderProductVariant> _orderProductVariant;
public SalesAllViewModel(IEnumerable<OrderProductVariant> orderProductVariant)
{
this._orderProductVariant = orderProductVariant;
}
}
现在,如果您需要基于传递给视图的值的逻辑,请在模型中更改它们。
public int SumOfSomethingInOrderProductVariant(int id)
{
return this._orderProductVariant
.Where(opv.ID == id)
.Sum(opv => opv.IntValue);
}
这意味着逻辑在视图中的所有数据中都是一致的。 如果您有多个区域使用视图中的某些逻辑显示相同的值,则很容易忘记并且必须将值复制并粘贴(yeeesh)其他位置。
使用 ViewBag 或ViewData 通常不受欢迎,因为没有人能说出控制器或视图中到底发生了什么,所有的魔力都隐藏在 View(Bag/Data) 中。
更新 1
请阅读模型-视图-控制器详细信息。
ViewModel(只是MVC技术描述中的模型)与数据访问无关。 它只是一个POCO,与实体框架,Oracle,XML或任何其他数据存储/检索技术无关。 ViewModel 背后的目标之一是将视图与数据源分离。
现在更令人困惑的是代码优先的方法,即没有构建良好的数据库???
这个问题与ViewModels无关。 这也是一个主观问题,所以没有充分的理由来回答它。
使用我正在使用的数据库,我似乎不需要所有的包含("订单")
既然你提到了EDMX文件,我可以假设你说的是实体框架。 如何使用实体框架取决于您。 如果出于性能原因需要包含,请执行此操作,如果不需要它提供的数据,请不要使用它。 无论哪种方式,它都与 ViewModel 在 MVC 中的使用方式无关。