Как решить Имя «ViewData» не существует в текущем контексте

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

Я использую движок Razor View, есть несколько сообщений, связанных с этим, но они, похоже, имеют отношение к реализации веб-форм.

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

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

Эти ссылки на типы являются предупреждением: Недопустимая квалификация модуля: невозможно разрешить сборку System.Web.WebPages.Razor.

Общий материал MVC работает нормально (используя только ссылки на модель), но пытается получить доступ к ViewData - не повезло


person Matt Evans    schedule 27.06.2011    source источник
comment
Есть ли какая-то конкретная причина, по которой вы используете ViewData вместо строго типизированных представлений и моделей представлений? Так как я не вижу.   -  person Darin Dimitrov    schedule 27.06.2011
comment
Нет, я просто экспериментирую с MVC. Я принимаю вашу точку зрения.   -  person Matt Evans    schedule 27.06.2011


Ответы (1)


В MVC3 добавлен ViewBag. Это просто динамическая оболочка вокруг ViewData. Теперь вы можете использовать что-то вроде этого:

ViewBag.Title = "Test"; 

Одним из замечательных преимуществ использования ViewBag вместо ViewData является то, что нам не нужно приводить ViewBag.Date к DateTime, ViewBag.Post к Post и ViewBag.Tags к массиву строк, прежде чем использовать их как таковые. Это снижает уровень шума в поле зрения.

Но, как сказал Дарин в комментарии, лучше всего использовать строго типизированные представления.

Ошибки, которые вы получаете в web.config, не связаны с этим. Однако я не уверен, какова точная причина этих ошибок, но кажется, что это не влияет на запуск приложения.

person Tomasz Jaskuλa    schedule 27.06.2011
comment
@Thomas Jaskula, ViewData по-прежнему поддерживается в MVC3 для обратной совместимости. - person Chris Snowden; 27.06.2011
comment
ViewData не был переименован в ViewBag. ViewBag был добавлен в ASP.NET MVC 3. При этом ни одна из этих двух концепций не должна использоваться в правильно спроектированном приложении ASP.NET MVC. Строго типизированные представления и модели представлений — правильный путь. - person Darin Dimitrov; 27.06.2011
comment
Да, это просто динамическая оболочка вокруг ViewData. - person Tomasz Jaskuλa; 27.06.2011
comment
Спасибо - использование синтаксиса viewbag вместо этого сработало, но у меня сложилось впечатление, что ViewBag был просто оболочкой над ViewData для удобства чтения? - person Matt Evans; 27.06.2011
comment
@Embo, да, ViewBag - это просто динамическая оболочка для ViewData. - person Darin Dimitrov; 27.06.2011
comment
@Дарин, я согласен с этим. Я изменил свой ответ. - person Tomasz Jaskuλa; 27.06.2011
comment
@ Томас Яскула, так намного лучше. Теперь, по крайней мере, мы гарантируем, что люди, которые могут наткнуться на этот ответ в будущем, не совершат ошибку, когда когда-либо будут использовать ViewData или ViewBag в своих приложениях. - person Darin Dimitrov; 27.06.2011
comment
@Darin: Вы снова упомянули ViewModels. Ты действительно мой герой! ;-) - person Tom Chantler; 27.06.2011
comment
@Доммер, конечно же, я упомяну их. Они просто являются ответом на все проблемы, с которыми люди сталкиваются при работе с ASP.NET MVC, поэтому я буду продолжать настаивать на их важности. - person Darin Dimitrov; 27.06.2011
comment
@DarinDimitrov Хорошо, все это сказано, у меня такая же проблема, и ViewBag тоже не работает. На самом деле, @model <type> и любые Html.*For() методы тоже не разрешаются. Например, я получаю "System.Web.WebPages.Html.HtmlHelper' does not contain a definition for 'HiddenFor' ..." Есть идеи? - person JoeBrockhaus; 04.09.2013