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

ViewModels или ViewBag?

Я новичок в MVC4, EF5 и ASP.Net, и я, кажется, не могу найти хороший ответ в любом месте.

В принципе, должно ли все быть сделано через viewmodel или это нормально также включить viewbag?

Скажем, у меня есть метод, который заполняет выпадающий список, и я использую viewmodel для представления вывода для представления.

Можно ли использовать Viewbag.DropDown = PopulateDropdown();, или было бы лучше включить это в ViewModel, создав свойство для хранения List<SelectListItem>, созданного PopulateDropdown();?

Я знаю, как удобный ViewBag, но я еще не вижу твердой причины, чтобы не использовать его? Если бы кто-нибудь мог предложить мне еще больше прозрения, это было бы фантастически.

4b9b3361

Ответ 1

В принципе, если все будет сделано через viewmodel или это нормально также включать в себя сумку просмотра?

Все должно быть сделано внутри модели представления. Это то, что представляет собой модель представления. Класс, который вы конкретно определяете для соответствия требованиям вашего представления. Не смешивайте ViewBags с ViewModels. Уже не ясно, откуда эта информация. Либо используйте только модель представления (подход, который я рекомендую), либо используйте только ViewBags. Но не смешивайте 2.

Итак, в вашем конкретном примере у вас будет свойство на вашей модели вида, имеющее тип IENumerable<SelectListItem>, и внутри вашего представления вы будете использовать строго типизированную версию Html.DropDownListFor для привязки к модели:

@Html.DropDownListFor(x => x.ProductId, Model.Products)

Очевидно, это только мои 2 цента. Другие люди скажут, что смешивание ViewModels и ViewBags в порядке, и я уважаю их мнение.

Ответ 2

Предпочитайте ViewModels над ViewBag, где только можете. Создание сильно типизированных представлений. Это делает ваш код более чистым, менее хрупким, менее подверженным ошибкам и простым в обслуживании.

ViewBags - это просто словари динамически типизированных объектов, поэтому вы теряете:

  • Проверка времени компиляции
  • Возможность рефакторинга с уверенностью (вы теряете поддержку инструментов)
  • Поддержка IDE - например, возможность перехода ко всем обычаям
  • Intellisense

Для бонусных точек, которые широко используют ViewBag, также не учитывается точка шаблон MVC

Получается впечатление, что ViewBags были созданы для решения проблемы краевого случая в asp.net, и люди используют их вместо создания моделей представлений, которые изначально были предназначены для проектирования платформы, в ущерб их работе.


благодаря fooobar.com/info/181100/...