Подтвердить что ты не робот

ViewData и ViewModel в MVC ASP.NET

Я новичок в разработке .Net и теперь следую руководству NerdDinner. Просто интересно, сможет ли кто-нибудь из вас сказать мне

В чем разница между ViewData и ViewModel

(все, что я знаю, они используются для передачи какой-либо информации из контроллера для просмотра) и, возможно, расскажите мне, в какой ситуации я должен использовать ViewData вместо ViewModel и наоборот

Спасибо заранее!

Салли

4b9b3361

Ответ 1

ViewData:

Короче говоря, используйте ViewData в качестве вспомогательных данных, таких как источник данных для SelectList.

ViewModel:

Шаблон ASP.NET MVC ViewModel

Когда класс контроллера решает вернуть HTML-ответ обратно клиент, он отвечает за явно переходя к представлению шаблон всех данных, необходимых для отдать ответ. Просмотр шаблонов никогда не должны выполнять никаких данных поисковой или прикладной логики - и должны вместо этого ограничиться имеет только код рендеринга, который отведенный от модели/данных, переданных это с помощью контроллера.

[...]

При использовании шаблона "ViewModel" мы создаем строго типизированный классы, оптимизированные для наших конкретные сценарии просмотра и которые выставлять свойства для динамического ценности/содержание, необходимые нашему представлению шаблоны. Наши классы контроллеров могут затем заполнить и передать эти классы, оптимизированные для просмотра, на наш взгляд шаблон для использования. Это позволяет тип-безопасность, проверка времени компиляции, и редактор intellisense в представлении шаблоны.

Ответ 2

Что такое ViewData?

  • объект словаря, в который вы помещаете данные, который затем становится доступный для просмотра.

Образец ViewData​​strong >

Контроллер Метод действий любит:

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 - лучший кандидат для этого.