[英]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.