我剛剛接觸.Net開發,現在正在關注NerdDinner教程。只是想知道如果任何你能告訴我MVC中的ViewData和ViewModel ASP.NET
什麼是ViewData的 和視圖模型之間的差異
(我所知道的是,他們被用來傳遞某種形式的數據從控制器到查看),也許告訴我什麼情況下,我應該使用ViewData而不是ViewModel,反之亦然
在此先感謝!
薩利
我剛剛接觸.Net開發,現在正在關注NerdDinner教程。只是想知道如果任何你能告訴我MVC中的ViewData和ViewModel ASP.NET
什麼是ViewData的 和視圖模型之間的差異
(我所知道的是,他們被用來傳遞某種形式的數據從控制器到查看),也許告訴我什麼情況下,我應該使用ViewData而不是ViewModel,反之亦然
在此先感謝!
薩利
的ViewData:
總之,使用的ViewData作爲載體的數據,如數據源到的SelectList。
視圖模型:
當一個控制器類決定渲染HTML的響應回 客戶端,它負責 明確地傳遞給視圖 模板所有數據需要 呈現響應。 不應該執行任何數據檢索 或應用程序的邏輯視圖模板 - 和 應該將自己限制 只有渲染代碼,該代碼 趕走通過控制器傳遞給 它的模型/數據。
[...]
當使用[在「視圖模型」]模式,我們創建強類型 類,都爲我們的 具體查看方案進行了優化,並 公開屬性的動態 值/我們認爲 模板需要的內容。我們的控制器類可以通過 填充並將這些 視圖優化的類傳遞給我們的視圖 使用的模板。這使 類型安全,編譯時檢查, 和編輯器intellisense模板中的查看 。
什麼是ViewData?你把數據轉化爲
ViewData的樣品
控制器的操作方法很喜歡:
public class HomeController : Controller
{
public ActionResult Index()
{
var featuredProduct = new Product
{
Name = "Smart Phone",
QtyOnHand = 12
};
ViewData["FeaturedProduct"] = featuredProduct;
return View();
}
}
如何在視圖中使用的ViewData?
@{
var viewDataProduct = ViewData["FeaturedProduct"] as Product;
}
<div>
Today's Featured Product is!
<h3>@viewDataProduct.Name</h3>
</div>
什麼是視圖模型?
它像優化用於消費和渲染單個對象
如何使用ViewModel和MVC 3?
域模型
public class Product
{
public Product() { Id = Guid.NewGuid(); Created = DateTime.Now; }
public Guid Id { get; set; }
public string ProductName { get; set; }
}
視圖模型
public class ProductViewModel
{
public Guid VmId { get; set; }
[Required(ErrorMessage = "required")]
public string ProductName { get; set; }
}
控制器操作方法
[HttpGet]
public ActionResult AddProduct()
{
//for initialize viewmodel
var productViewModel = new ProductViewModel();
//assign values for viewmodel
productViewModel.ProductName = "Smart Phone";
//send viewmodel into UI (View)
return View("AddProduct", productViewModel);
}
視圖 - AddProduct.cshtml
@model YourProject.ViewModels.ProductViewModel //set your viewmodel here
結論
我經常發現它更簡潔,可以將你需要的域模型作爲私有成員加載到ViewModel中,並公開你想要的通過屬性查看。此外,如果您將其設置爲適配器,則通過視圖模型返回的數據可以反過來保護隱藏域對象上的數據。 – Sinaesthetic 2014-01-03 19:06:58
感謝您的回答,任何人需要了解更多關於這個話題我還發現了一個偉大的博客條目,涉及到我的問題http://theminimalistdeveloper.com/2010/08/21/why-when-and-如何使用typed-views-and-viewmodel-pattern-in-asp-net-mvc/ – 2011-03-03 06:55:30