ViewData и ViewModel в MVC ASP.NET - PullRequest
       29

ViewData и ViewModel в MVC ASP.NET

10 голосов
/ 03 марта 2011

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

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

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

Заранее спасибо!

Салли

Ответы [ 2 ]

10 голосов
/ 03 ноября 2012

Что такое 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?

  • Позволяет формировать несколько объектов из одной или нескольких моделей данных или источников в один объект
  • Оптимизировано для потребления и рендеринга представлением

Это как:

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
  • Но ViewДанные имеют свободную типизацию. Поэтому необходимо преобразовывать данные в View
  • . ViewModel можно использовать для сложных сценариев, таких как объединение нескольких моделей домена.
  • . Но ViewData можно использовать только для простых сценариев, таких как перенос данныхдля раскрывающегося списка
  • ViewModel можно использовать для сценариев проверки на основе атрибутов, которые необходимы для Ui
  • , но нельзя использовать ViewData для такого рода проверок
  • . Всегда рекомендуетсяпопробуйте использовать строго типизированные данные с Views.ViewModel - лучший кандидат для этого.
8 голосов
/ 03 марта 2011

ViewData:

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

ViewModel:

Шаблон модели представления ASP.NET MVC

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

[...]

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

...