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());
}

MVC 视图模型

我建议为每个需要任何类型的数据的视图创建一个 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 中的使用方式无关。