ViewData и ViewModel в MVC ASP.NET
Я новичок в разработке .Net и теперь следую руководству NerdDinner. Просто интересно, сможет ли кто-нибудь из вас сказать мне
В чем разница между ViewData и ViewModel
(все, что я знаю, они используются для передачи какой-либо информации из контроллера для просмотра) и, возможно, расскажите мне, в какой ситуации я должен использовать ViewData вместо ViewModel и наоборот
Спасибо заранее!
Салли
Ответы
Ответ 1
ViewData:
Короче говоря, используйте ViewData в качестве вспомогательных данных, таких как источник данных для SelectList.
ViewModel:
Шаблон ASP.NET MVC ViewModel
Когда класс контроллера решает вернуть HTML-ответ обратно клиент, он отвечает за явно переходя к представлению шаблон всех данных, необходимых для отдать ответ. Просмотр шаблонов никогда не должны выполнять никаких данных поисковой или прикладной логики - и должны вместо этого ограничиться имеет только код рендеринга, который отведенный от модели/данных, переданных это с помощью контроллера.
[...]
При использовании шаблона "ViewModel" мы создаем строго типизированный классы, оптимизированные для наших конкретные сценарии просмотра и которые выставлять свойства для динамического ценности/содержание, необходимые нашему представлению шаблоны. Наши классы контроллеров могут затем заполнить и передать эти классы, оптимизированные для просмотра, на наш взгляд шаблон для использования. Это позволяет тип-безопасность, проверка времени компиляции, и редактор intellisense в представлении шаблоны.
Ответ 2
Что такое ViewData?
- объект словаря, в который вы помещаете данные, который затем становится
доступный для просмотра.
Образец ViewDatastrong >
Контроллер Метод действий любит:
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 Featured Product is!
<h3>@viewDataProduct.Name</h3>
</div>
Что такое ViewModel?
- Позволяет создавать несколько объектов из одной или нескольких моделей данных или
источники в один объект
- Оптимизирован для потребления и рендеринга по представлению
Свое вроде:
![View Model image]()
Как использовать 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
- Но ViewData не типично. Так что вам нужно вводить данные в View
- ViewModel может использоваться для сложных сценариев, таких как слияние более одного
модель домена
- Но ViewData может использоваться только для простых сценариев, таких как перенос данных
для выпадающего списка
- ViewModel может использоваться для сценариев проверки на основе атрибутов, которые
необходимо для Ui
- Но не может использовать ViewData для такого рода проверки
- В качестве наилучшей практики всегда старайтесь использовать строго типизированные данные с
Views.ViewModel - лучший кандидат для этого.