簡體   English   中英

MVC視圖模型

[英]MVC View Models

我在了解View Models時遇到了一些麻煩,這往往使我誤入歧途,並在View本身中進行了計算,因此生成了意大利面條式的代碼,否則我就落在了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;
  }
}

現在,如果您需要基於傳遞給視圖的值的邏輯,請在模型中進行更改。

  public int SumOfSomethingInOrderProductVariant(int id)
  {
    return this._orderProductVariant
      .Where(opv.ID == id)
      .Sum(opv => opv.IntValue);
  }

這意味着邏輯對視圖中的所有數據都是一致的。 如果您有多個區域使用視圖中的某些邏輯顯示相同的值,則很容易忘記,而必須將值復制並粘貼(粘貼)到其他位置。

通常不贊成使用ViewBag或ViewData,因為沒人能說出控制器或視圖中的實際情況,所有魔術都隱藏在View(Bag / Data)中。

更新1

請閱讀Model-view-controller詳細信息

ViewModel(在MVC的技術描述中只是模型)與數據訪問無關 它只是一個POCO ,與Entity Framework,Oracle,XML,XML或任何其他數據存儲/檢索技術無關。 ViewModel的目標之一是將視圖與數據源分離。

現在更加困惑的是代碼優先方法。 沒有完善的數據庫???

這個問題與ViewModels無關。 同樣,這是一個主觀問題,因此沒有充分的理由回答。

使用數據庫時,我似乎不需要所有的Include(“ Order”)

既然您提到了EDMX文件,那么我可以假設您正在談論Entity Framework。 您如何使用實體框架取決於您。 如果出於性能原因需要包括,則不要使用,如果不需要它提供的數據,則不要使用它。 無論哪種方式,都與MVC中ViewModel的使用方式無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM