Когда использовать ViewModel, а когда нет в Asp.net MVC - PullRequest
2 голосов
/ 07 ноября 2011

AFAIK, существует два способа передачи данных в представление из контроллера: один свободно печатается (с помощью ViewBag или ViewData), другой строго типизируется. Большинство рекомендуют последнее из-за строгой проверки во время компиляции.

В динамическом веб-приложении мы сталкиваемся со сценариями, когда требуется передать несколько объектов из контроллера в представление. В этом случае можно передать одну сущность в качестве модели и поместить ее в словарь ViewBag. Или можно создать совершенно новый класс ViewModel, объединяя различные сущности и затем передавая его в представление.

Недавно я столкнулся с такой проблемой; Мне нужно было передать модель категории, у которой был список подкатегорий и продуктов, зарегистрированных в ней как свойства. И затем, в представлении, мне нужно было воспроизвести подкатегории и убедиться, что разбиение на страницы происходит в коллекции продуктов, если их больше 10. Поэтому я не мог использовать строго типизированное представление ни для модели категории, ни для модели продукта.

Решение было представлено следующими коллегами, tvanfosson и Ufuk Hacıoğulları (Большое спасибо обоим) в этой публикации . И это использовать ViewModel. Я все еще пытаюсь понять и работать над этим, и, похоже, это правильное решение.

Вопрос : Это лучший способ справиться с такими ситуациями? Кроме того, когда рекомендуется использовать ViewModel, а когда обходить его в пользу ViewBag & a Model.

1 Ответ

6 голосов
/ 07 ноября 2011

Единственная цель класса Viewmodel состоит в том, чтобы содержать (строго типизированные) данные, которые будут отправлены в представление методом действия.

Так как ответы на ваш вопрос предлагают создать класс Viewmodelкоторый содержит свойства для всех данных, которые вам нужны в вашем представлении.

Преимущество использования Viewbag состоит в том, что у вас нет накладных расходов на создание отдельного класса.Недостатком является то, что у вас нет проверки типов времени компиляции и нет смысла intellisense.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...