Безопасность MVC 5 ViewBag

Я кодирую интернет-приложение MVC, и у меня есть вопрос относительно использования ViewBag.

Во многих моих контроллерах есть объекты SelectList, где пользователь может выбрать объект. Выбранный объект является значением внешнего ключа для моей модели.

У меня такой вопрос: Должен ли я использовать ViewBag для этого? Насколько безопасен ViewBag? Должен ли я использовать значения в моей ViewModel вместо ViewBag?

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


person user3736648    schedule 16.01.2015    source источник
comment
Если вы используете модель представления, то имеет смысл включить ваши свойства SelectList в модель представления, но нет никакой разницы между свойством модели и свойством ViewBag с точки зрения «безопасности».   -  person    schedule 16.01.2015


Ответы (2)


Используйте свою модель представления.

Когда ViewBag был реализован (MVC 3), динамическая типизация была новой (.NET 4.0) и была добавлена ​​просто как побочная опция для ViewData или для быстрого создания представления без необходимости в дополнительных классах.

Любой серьезный проект MVC будет использовать модель/модель представления со строго типизированным представлением.

Ни в том, ни в другом нет проблем с безопасностью, потому что оба по существу существуют только в течение срока службы контроллеров.

person James Sampica    schedule 16.01.2015

У ViewBag нет проблем с безопасностью, поскольку он удаляется после рендеринга в представлении.

Я думаю, что ответ действительно должен быть "it depends". Например, если у вас есть 6 коллекций, необходимых для заполнения выпадающих списков, и вы хотите получить обратно отправленные данные, вам обязательно нужно использовать для этого ViewModel. Так как 6 коллекций будет трудно управлять, если они будут помещены в ViewBag без строгой типизации в представлении, особенно если позже появится другой разработчик, которому потребуется выполнить обслуживание представления.

Как правило, все должно быть сделано внутри view model. Вот что такое модель представления. Класс, который вы специально определяете для удовлетворения требований вашего представления. Вот изображение, в котором показано, когда использовать TempData, ViewBag или ViewData

введите здесь описание изображения

person Tushar    schedule 16.01.2015