ViewModels или ViewBag?
Я новичок в MVC4, EF5 и ASP.Net, и я, кажется, не могу найти хороший ответ в любом месте.
В принципе, должно ли все быть сделано через viewmodel или это нормально также включить viewbag?
Скажем, у меня есть метод, который заполняет выпадающий список, и я использую viewmodel для представления вывода для представления.
Можно ли использовать Viewbag.DropDown = PopulateDropdown();
, или было бы лучше включить
это в ViewModel, создав свойство для хранения List<SelectListItem>
, созданного PopulateDropdown();
?
Я знаю, как удобный ViewBag, но я еще не вижу твердой причины, чтобы не использовать его? Если бы кто-нибудь мог предложить мне еще больше прозрения, это было бы фантастически.
Ответы
Ответ 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/...