Ответ 1
Я использую их редко, для битов информации, которые полностью не связаны с моделью или моделью представления, которую я передаю в представление, опять же, большую часть времени, когда я использую модель представления
Я понимаю, что наилучшей практикой является использование строго типизированных представлений и передача всех необходимых данных в ViewModel, но мне любопытно, есть ли ситуации, когда на самом деле считается "наилучшей практикой" передавать данные в ViewBag/ViewData.
В каких сценариях используется ViewBag/ViewData для передачи данных в представление?
Обновление
Хорошо слышать различные виды использования, которые все придумали для ViewBag/ViewData. Мы, возможно, никогда не придем к "лучшей практике", но будет здорово видеть, как люди, которые придумали разные решения, полагаются на ViewBag/ViewData.
Я использую их редко, для битов информации, которые полностью не связаны с моделью или моделью представления, которую я передаю в представление, опять же, большую часть времени, когда я использую модель представления
Я предпочитаю использовать DTO вместо использования viewbag. Использование DTO делает вас сильным типом ваших представлений.
Надеюсь, что это поможет.
Обычно я использую строго типизированное представление для отображения любого содержимого, но часто устанавливаю ViewBag.Member
для текущего зарегистрированного участника, чтобы он мог использоваться в основном макете в дополнение к определенному виду.
У меня есть атрибут PopulateMemberContext
, который заполняет ViewBag.Member
, и я добавляю этот атрибут к базовому контроллеру, чтобы каждый вид всегда имел необходимые данные.
"Правый" или "Неверный", я не знаю, но он отлично работает.
Я не могу сказать о лучшей практике, но в основном использую ее при использовании шаблонов редакторов. например, если я хочу отобразить выпадающий список для редактирования определенного поля, я делаю следующий шаблон редактора
<%:Html.DropDownList("GetIDHere", new SelectList((IEnumerable<someModel>)ViewData["xyz"]),"select Author")%>
Затем вы помещаете атрибут UIHint в поле BookID вашей модели, например
public class Book
{
public int BookID{get;set;}
[UIHint("mytemplate")]
public int AuthorID{get;set;}
}
в таких случаях я предполагаю, что особенно тонкий и чистый для использования ViewData. таким образом, проекты Telerik asp.net mvc закодированы в своих демонстрационных проектах demo