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

Когда "приемлемо" использовать ViewBag/ViewData в ASP.NET MVC?

Я понимаю, что наилучшей практикой является использование строго типизированных представлений и передача всех необходимых данных в ViewModel, но мне любопытно, есть ли ситуации, когда на самом деле считается "наилучшей практикой" передавать данные в ViewBag/ViewData.

В каких сценариях используется ViewBag/ViewData для передачи данных в представление?

Обновление

Хорошо слышать различные виды использования, которые все придумали для ViewBag/ViewData. Мы, возможно, никогда не придем к "лучшей практике", но будет здорово видеть, как люди, которые придумали разные решения, полагаются на ViewBag/ViewData.

4b9b3361

Ответ 1

Я использую их редко, для битов информации, которые полностью не связаны с моделью или моделью представления, которую я передаю в представление, опять же, большую часть времени, когда я использую модель представления

Ответ 2

Я предпочитаю использовать DTO вместо использования viewbag. Использование DTO делает вас сильным типом ваших представлений.

Надеюсь, что это поможет.

Ответ 3

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

У меня есть атрибут PopulateMemberContext, который заполняет ViewBag.Member, и я добавляю этот атрибут к базовому контроллеру, чтобы каждый вид всегда имел необходимые данные.

"Правый" или "Неверный", я не знаю, но он отлично работает.

Ответ 4

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

<%: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