Что такое ViewData?
- объект словаря, в который вы помещаете данные, которые затем становятся доступными для представления.
Образец ViewData
Нравится метод действия контроллера:
public class HomeController : Controller
{
public ActionResult Index()
{
var featuredProduct = new Product
{
Name = "Smart Phone",
QtyOnHand = 12
};
ViewData["FeaturedProduct"] = featuredProduct;
return View();
}
}
Как использовать ViewData на View?
@{
var viewDataProduct = ViewData["FeaturedProduct"] as Product;
}
<div>
Today's Featured Product is!
<h3>@viewDataProduct.Name</h3>
</div>
Что такое ViewModel?
- Позволяет формировать несколько объектов из одной или нескольких моделей данных или источников в один объект
- Оптимизировано для потребления и рендеринга представлением
Это как:
Как использоватьViewModel с MVC 3?
модель домена
public class Product
{
public Product() { Id = Guid.NewGuid(); Created = DateTime.Now; }
public Guid Id { get; set; }
public string ProductName { get; set; }
}
ViewModel
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 можно передавать строго типизированные данные в View
- Но ViewДанные имеют свободную типизацию. Поэтому необходимо преобразовывать данные в View
- . ViewModel можно использовать для сложных сценариев, таких как объединение нескольких моделей домена.
- . Но ViewData можно использовать только для простых сценариев, таких как перенос данныхдля раскрывающегося списка
- ViewModel можно использовать для сценариев проверки на основе атрибутов, которые необходимы для Ui
- , но нельзя использовать ViewData для такого рода проверок
- . Всегда рекомендуетсяпопробуйте использовать строго типизированные данные с Views.ViewModel - лучший кандидат для этого.