Интересно, почему все так ненавидят ViewData?
Я считаю это весьма полезным и удобным. Я говорю вам, почему: обычно каждое действие контроллера имеет свою собственную ViewModel, поэтому он используется только один раз, и мне очень утомительно изменять класс ViewData каждый раз, когда мне нужно добавить дополнительную часть данных для просмотра (добавление дополнительного поля в класс обычно приводит к изменение его конструктора). Вместо этого я могу написать в контроллере
ViewData["label"] = someValue;
// in mvc 3 even better:
ViewData.Label = someValue
и в представлении
<%= ViewData["label"] %>
<%-- mvc 3: --%>
<%= ViewData.Label %>
или для сложных типов:
<% ComplexType t = (ComplexType)ViewData["label"]; %> // and use all benefits of strong typing
<%= t.SomeProperty %>
Написав действие контроллера, мне не нужно переключаться на другой класс, когда мне нужно добавить некоторые данные для просмотра.
И большой плюс для меня: не наводнять ваш проект бессмысленными классами и не переключаться между ними и другими.
Я согласен с тем, что использование «волшебных строк» может привести к ошибкам, которые не улавливаются компилятором, но эти ошибки локализуются в очень небольшой части кода и могут быть обнаружены очень быстро. Кроме того, как вы думаете, ребята, работающие с динамическими языками (rails, django), вообще могут жить без строгой типизации?)
Что вы думаете об использовании ViewData?