C# MVC视图模型

C# MVC视图模型,c#,asp.net-mvc,C#,Asp.net Mvc,我的头脑在视图模型上有点困难,这会让我误入歧途,在视图中进行计算,因此是意大利面代码,否则我会选择ViewBag。我听说这两种方法都是不正确的 我实际上只在MVC中首先使用数据库,所以我所有的网站都有一个.EDMX作为他们的模型。下面的代码返回一个IEnumerable订单列表,这很好,但是我应该如何将总数相加,以便在列表末尾显示它们呢?目前我在视图中的foreach语句中这样做 public ActionResult SalesAll() { var orderproductvaria

我的头脑在视图模型上有点困难,这会让我误入歧途,在视图中进行计算,因此是意大利面代码,否则我会选择ViewBag。我听说这两种方法都是不正确的

我实际上只在MVC中首先使用数据库,所以我所有的网站都有一个.EDMX作为他们的模型。下面的代码返回一个IEnumerable订单列表,这很好,但是我应该如何将总数相加,以便在列表末尾显示它们呢?目前我在视图中的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;
  }
}
这意味着视图中所有数据的逻辑都是一致的。如果您有多个区域使用视图中的某些逻辑显示相同的值,则很容易忘记,必须将值复制并粘贴(yeeesh)到其他位置

使用ViewBag或ViewData通常是不受欢迎的,因为没有人知道控制器或视图中到底发生了什么,所有的魔力都隐藏在视图(Bag/Data)中

更新1

请阅读

ViewModel(只是MVC技术描述中的模型)与数据访问无关。它只是一个与实体框架、Oracle、XML或任何其他数据存储/检索技术无关的应用程序。ViewModel背后的目标之一是将视图与数据源解耦


现在更令人困惑的是,代码优先的方法,即没有良好构建的数据库吗

此问题与ViewModels无关。这也是一个问题,所以没有很好的理由来回答

对于我正在使用的数据库,我似乎不需要所有的Include(“订单”)


既然您提到了一个EDMX文件,我可以假设您所说的是实体框架。如何使用实体框架取决于您。如果出于性能原因需要包含,那么就这样做;如果不需要它提供的数据,就不要使用它。无论哪种方式,它都与MVC中如何使用ViewModel无关。

我建议为每个需要任何类型数据的视图创建ViewModel

在这种情况下,我将创建:

public class SalesAllViewModel
{
  IEnumerable<OrderProductVariant> _orderProductVariant;

  public SalesAllViewModel(IEnumerable<OrderProductVariant> orderProductVariant)
  {
    this._orderProductVariant = orderProductVariant;
  }
}
这意味着视图中所有数据的逻辑都是一致的。如果您有多个区域使用视图中的某些逻辑显示相同的值,则很容易忘记,必须将值复制并粘贴(yeeesh)到其他位置

使用ViewBag或ViewData通常是不受欢迎的,因为没有人知道控制器或视图中到底发生了什么,所有的魔力都隐藏在视图(Bag/Data)中

更新1

请阅读

ViewModel(只是MVC技术描述中的模型)与数据访问无关。它只是一个与实体框架、Oracle、XML或任何其他数据存储/检索技术无关的应用程序。ViewModel背后的目标之一是将视图与数据源解耦


现在更令人困惑的是,代码优先的方法,即没有良好构建的数据库吗

此问题与ViewModels无关。这也是一个问题,所以没有很好的理由来回答

对于我正在使用的数据库,我似乎不需要所有的Include(“订单”)


既然您提到了一个EDMX文件,我可以假设您所说的是实体框架。如何使用实体框架取决于您。如果出于性能原因需要包含,那么就这样做;如果不需要它提供的数据,就不要使用它。无论哪种方式,它都与ViewModel在MVC中的使用方式无关。

您好,我喜欢您的说法,这可能正是我想要的,但就我而言,我的问题仍然有点模糊。你能给我看更多的代码吗???现在更让人困惑的是,代码优先的方法,即没有良好构建的数据库吗???我现在不知道!对于我使用的数据库,我似乎不需要所有的Include(“订单”),我不知道你为什么会感到困惑。但是我已经用更多的信息更新了我的问题。嗨,我喜欢你说的话,这可能正是我想要的,但就我而言,我的问题仍然有点模糊。你能给我看更多的代码吗???现在更让人困惑的是,代码优先的方法,即没有良好构建的数据库吗???我现在不知道!对于我使用的数据库,我似乎不需要所有的Include(“订单”),我不知道你为什么会感到困惑。但是我用更多的信息更新了我的问题。