Имя ViewBag не существует в текущем контексте - Visual Studio 2015

98

Я снова начинаю разрабатывать ASP.NET и столкнулся с небольшой ошибкой в ​​Visual Studio. Мои файлы .cshtml показывают ошибки при использовании некоторых функций бритвы. Например, «Имя ViewBag не существует в текущем контексте». Вот картинка:

скриншот проблемы в Visual Studio 2015

Я использую демонстрационный проект. Вы можете найти проект здесь: https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

Я просмотрел несколько других тем, и большинство из них предлагает обновить файл (ы) web.config. Эти 2 файла конфигурации уже присутствуют, и, поскольку это довольно популярная демонстрация, я предполагаю, что в ней есть вся необходимая конфигурация. Я, конечно, просмотрел эти файлы конфигурации, и они действительно включают предлагаемые решения.

Другие детали:

  • Я уже использовал решение clean & rebuild, но это ничего не изменило.
  • Когда я создаю совершенно новый проект MVC, он действительно работает
  • У моего друга такая же проблема, и мы оба используем VS 2015 и Windows 10.
  • Я все еще могу запустить приложение, и оно работает.

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

Michjuh
источник
Когда он все еще работает, это просто ошибка фонового компилятора. Попробуйте удалить файл <Projectname> .suo.
Хенк Холтерман,
какой проект вы запускаете? базовый? хрень, пойдем?
Prashant Ghimire
1
@Henk, к сожалению, не сработало.
Michjuh
@Prashant Я пробовал как базовый проект, так и проект маршрутизации. Проблема возникает в обоих из них.
Michjuh
Вы это решили? У меня была такая же проблема @Michjuh
Burk

Ответы:

124

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

Оказалось, что это были плохие файлы в кэше компонентов, которые мешали представлениям Razor распознавать ViewBag, Model и HtmlHelpers . Удаление этих файлов решило проблему (хорошие версии этих файлов были созданы при следующем открытии Visual Studio).

Файлы находятся здесь:

%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache

Удалите все четыре файла:

  • Microsoft.VisualStudio.Default.cache
  • Microsoft.VisualStudio.Default.catalogs
  • Microsoft.VisualStudio.Default.err
  • Microsoft.VisualStudio.Default.external

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

Фентон
источник
9
Замечательно, это устранило проблему для меня. Я также обнаружил, что удаление ваших временных файлов ASP.NET также помогает. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET Files
Кевин,
Это было исправлением и для меня. Спасибо за публикацию!
Caverman
Это устранило мою проблему, вызванную обновлением .net 4 до 4.5.2 и обновлением mvc 3 до 5
Джо Филлипс,
Моя проблема заключалась в том, что свойства моей модели не распознавались. Это исправление немедленно решило мою проблему.
jkerak
5
моя папка - 15.0_7e8de76c \ ComponentModelCache для VS 2017.
Кевин .NET
40

Обновите номера версий в настройках web.configфайла в папке Views.

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Если вы обновили версию MVC через nuget, должно быть:

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Возможно, потребуется обновить и другие версии зависимостей. Проблемы с компиляцией и пространством имен в представлениях для помощников и объектов MVC обычно связаны с испорченными web.configфайлами в папках представления.

Бенджамин Андерсон
источник
9
У меня это сработало, хотя мне пришлось ввести номер версии 5.2.0.0 вместо 5.2.2.0. Вы можете узнать, какая у вас версия, перейдя в «Ссылки»> «System.Web.MVC» и выбрав «Свойства». Спасибо за помощь
user2233949
@ user2233949, @Benjamin Я использую версию MVC 4.0.0.0, это видно из свойств. Что нужно исправить в моем случае?
Zeeshan
Проверьте все ваши файлы web.config и убедитесь, что все они используют правильную версию хоста. Иногда, когда вы переопределяете настройки в папках просмотра, проблема может проскользнуть без исправления.
Бенджамин Андерсон
1
Я пробовал все другие предложения, но этот сработал для меня с использованием 5.2.3.0. Спасибо, Бенджамин
Митч
1
Для меня это был правильный ответ. Кроме того, после изменения web.config, не забудьте закрыть все ваши *.cshtmlи *.vbhtmlфайлы и очистить и восстановить решение. VS 2019 16.1.2
Štěpán
22

Найдите в настройках приложения «Веб-страницы: Версия» и обновите его до версии 3.0.0.0. В моем web.config

<add key="webpages:Version" value="2.0.0.0" />

и я обновил его до

<add key=”webpages:Version value=”3.0.0.0 />
Дамиан Грин
источник
1
Я удалил обе строки (webpages.Version, webpages.Enabled) и, похоже, отлично работает в MVC 5.2
Grappachu
Это должно быть обновлено в обеих версиях Web.config, в корне проекта, а также в Web.configs любой области.
Sonu K
Спасибо. В моем случае проблемные теги находятся в <configuration> - <configSections> - <sectionGroup name = "system.web.webPages.razor"> Мне нужно изменить <sectionGroup name = "system.web.webPages.razor">, <section name = "host"> и <section name = "pages"> для использования версии = 3.0.0.0
Гонконг,
Удаление кеша в любом месте (в том числе Temporary ASP.NET Files) не помогло, но этот ответ помог .
wha7ever 02
Что этот параметр даже значит ? Чему это соответствует? Как вы определяете, какая версия вашего приложения зависит от вас?
jpmc26 07
18

Случайно удалил web.configиз Viewsпапки, подумав, что это не нужно. Когда поставил обратно, заработало.

InGeek
источник
13

Перепробовав все под солнцем, то получается, что - то изменило мои System.Web.WebPages.Razor <sectionGroup>ин /Views/Web.Configот надлежащего CamelCase System.Web.WebPages.Razorна все-строчный , system.web.webpages.razorкоторая в конечном счете была моя кончиной.

Надеюсь, это поможет какой-нибудь другой бедной душе справиться с этой проблемой ...

Для справки, это правильная запись (для моего сценария)

<sectionGroup name="System.Web.WebPages.Razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
jbwebtech
источник
3
У меня все было в нижнем регистре, но это не решило мою проблему.
Пол Тотцке 05
Святой карп. Это тоже была моя кончина. Не могу поверить, что ты это обнаружил, @jbwedtech.
Люк Пуплетт,
У меня они тоже были в нижнем регистре, и изменение регистра не решило проблему.
Энди Браун
5

Иногда бывает недостаточно изменить номера версий в настройках web.config. Эта проблема возникает из-за того, что в Visual Studio 2015 нет инструментов mvc4.

Решение - обновить ваш проект до MVC 5. Это полностью решает проблему. Вы можете получить помощь на этой странице. Это ясно объясняет.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- api-2

Кстати, команда Visual Studio заявила, что добавит поддержку mvc4 в Visual Studio 2015 с первым обновлением.

Burk
источник
5

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

Hosam Hemaily
источник
2
Но что должно быть в этом файле web.config? Разве он не должен создаваться автоматически? (обновление) Нашел, что он должен иметь и как он генерируется stackoverflow.com/questions/29305914/…
drzaus 08
Да, вы правы, в моем проекте Web.Config раньше не существовал (да, он должен генерироваться автоматически, но взял проект от предыдущего разработчика, не знаю, почему он его удалил). После добавления файла Web.Config для папок Views все заработало.
user3559462
2

поздно к игре, но ни одно из этих решений не помогло мне.

Я обновился до VS 2017, и сайт работал, но компилятор Visual Studio сломал большинство файлов .cshtml.

TL; DR;

mysolution.sln имеет неправильную версию

sln diff

поэтому вы хотите создать новое решение с более новой VS, сравнить его со своим и скопировать информацию о версии.

полные шаги обновления:

  1. убедитесь, что файл .sln имеет правильную версию для VS
  2. щелкните правой кнопкой мыши MySolution в VS> Nuget Manager> Обновления> запустите все обновления
  3. щелкните правой кнопкой мыши MySolution в VS> Приложение> обновить Target Framework (4.5.2 в моем случае)
  4. исправить любые проблемы с версией в файлах .config (например, от RAZOR до 3.0.0.0)
  5. исправить любые проблемы с кодом в компиляторе (для меня ForEach был неоднозначным)
Sonic Soul
источник
Мой проект был запущен в VS2013, когда я нажал на VS2017, я начал видеть эти ошибки, но все скомпилировалось нормально, поэтому я попытался выяснить, что происходит, но не слишком сложно. Это становилось проблемой из-за того, что при открытии представления создавалось большое количество ошибок. Я сейчас на VS2019 и наткнулся на ваше исправление; ты жжешь! У моего .sln было 14.0.25123.0, а должно было быть 16.3.9. Я также исправил все проблемы с версией фреймворка. Мне не пришлось обновлять пакеты nuget (к счастью), так как у меня нет времени полностью протестировать все обновления.
DaBlue
1

Я потратил на это много рабочего дня. Я пробовал все в этом (и других) постах, но безрезультатно. В конце концов я обнаружил, что мне нужно открыть проект по-другому. Я только что обновил существующий веб-сайт до Visual Studio 2015, MVC5, .NET framework 4.5.2 и использую Windows 10, но подозреваю, что ответ был бы таким же для других версий каждого программного приложения.

Итак, это вариант меню, который я выбрал, чтобы открыть веб-сайт:

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

Вместо этого я открыл файл csproj, определяющий проект, используя эту опцию меню:

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

Затем у меня был вариант «чистого решения», на который ссылаются многие другие:

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

Впрочем, мне это даже не понадобилось - все просто заработало! Что ж, я все равно перешел к следующему набору проблем ...

Энди Браун
источник
1

Я добавил контроллер

  • Шаг 1: Добавить> Класс
  • Шаг 2: UserController
  • .
  • .
  • .

соответствующий код создан:

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Мои ошибки были изменены путем изменения Шага 1 как:

  • Шаг 1: Добавить> Контроллер
  • Шаг 2: Пользовательский контроллер
  • .
  • .
  • .

соответствующий код создан:

namespace SampleApp.Controller {
    public class UserController : Controller {
    }
}

Проблема заключалась в следующем: я не унаследовал свой класс от контроллера.

В мою ошибку включены и другие сообщения - все из этой проблемы:

ошибка CS0117: «ModelState» не содержит определения для «IsValid»

ошибка CS0103: имя RedirectToAction не существует в текущем контексте

ошибка CS0103: имя "Просмотр" не существует в текущем контексте.

ошибка CS0103: имя ViewBag не существует в текущем контексте

ошибка CS0103: имя "Json" не существует в текущем контексте

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

Ганеш Камат - "Кодовое безумие"
источник
1

Попробовав хотя бы 90% всех решений / уловок по этой (и другим) теме, я наконец решил это !! Спойлер, нет никаких следов логики - это следующее так называемое «решение»: запуск решения со всеми закрытыми вкладками, наконец, сработал, когда ничто другое не спасло бы меня, «ViewBag & Co не существует в текущем контексте» ... Вас предупредили, никакой долбанной логики!

Надеюсь, однажды это кому-нибудь поможет ^^

Юверхард
источник
1

В моем случае эта проблема возникала только на моем ПК только для одного проекта. Мой проект отлично работал в VS2012, но при открытии в VS2017 возникла эта проблема.

Основной проблемой для меня здесь был кеш. Мой проект указывал на более старые кешированные версии dll для Razor и MVC и не находил функций, которые были добавлены в более новых версиях, таких как ViewBag. ViewBag был добавлен в Razor версии 3, но поскольку у меня был кэширован Razor версии 2, он не мог найти ViewBag (но мог найти другие вещи, которые присутствовали в версии 2). Однако простая очистка кеша, как в принятом ответе, не устранила мою проблему. Нам пришлось изменить файлы конфигурации, чтобы сказать «использовать версию 3 вместо 2» для Razor и «использовать версию 5 вместо 4» для MVC, затем закрыть VS, удалить кеш, открыть проект и перестроить. Потом все наладилось. Ниже приведены более подробные инструкции.

Вот последовательность изменений, которые помогли мне решить мою проблему:

  1. В Web.config папки "Просмотры" измените все места, где
    • Версия MVC установлена ​​от 4.0.0.0 до 5.0.0.0
    • Версия Razor установлена ​​от 2.0.0.0 до 3.0.0.0

Вот эти строки в моем случае:

<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
    <section name="host" type="... Version=3.0.0.0 ..." .../>
    <section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
    ...
    pageParserFilterType="... Version=5.0.0.0 ..."
    pageBaseType="... Version=5.0.0.0 ..."
    userControlBaseType="... Version=5.0.0.0 ...">
    <controls>
        <add assembly="... Version=5.0.0.0 ..." ... />
    </controls>
</pages>

(примечания: 1) ваши версии могут быть разными, я просто говорю, что нужно было сделать в моем случае 2) Я пропустил некоторые вещи с помощью «...» для краткости 3) даже если у вас есть версия MVC, например, 5.3.2.0 вы все равно должны ввести 5.0.0.0, то же самое с версией Razor - введите все нули в 3.0.0.0)

  1. В основном файле конфигурации (тот, что на верхнем уровне) измените webPages:versionс 2.0.0.0 на 3.0.0.0.

  2. Возможно, это изменение не повлияло на решение, но я все же упомяну об этом. Убедитесь, что <namespaces>раздел папки «Просмотры» имеет то же содержимое, что и основной файл .conifg в корне проекта, например:

<namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
</namespaces>
  1. Наконец, закройте VS. Удалите все файлы кеша в %LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(или независимо от того, какой у вас правильный путь), как это предлагается в (в настоящее время) принятом ответе Фентона. Также удалите .scanфайл, даже если он не упоминается в этом ответе. Когда вы закончите, откройте VS, очистите свой проект и перестройте его. Теперь все должно работать. У меня это сработало.
что бы то ни было
источник
0

Отключение и повторное включение сработало для меня. Вы можете попробовать перезапустить Visual Studio.

kravits88
источник
Звучит как шутка, но это то, что меня исправило.
Дуглас Тиммс
0

Мне удалось решить проблему, добавив следующее в начало моей страницы .cshtml

@{ViewBag.Title = "Title";}

После перекомпиляции мне удалось удалить эту строку, и ошибка исчезла.

Колин
источник
0

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

САТЬЯ ПРАКАШ НАНДИ
источник
0

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

Итак, наконец, я сделал, как показано ниже:

  1. Нажмите Windows Key + R
  2. Введите % temp%
  3. Нажмите Enter
  4. Удалите все файлы (если не удаленными остались несколько файлов, проблем нет)

Надеюсь, это сработает и для вас, ребята.

Садик
источник
0

После обновления одного из моих клиентских приложений с ASP MVC 4 до ASP MVC 5 у нас возникли ошибки дизайнеров, связанные с Html Helpers и ViewBag на страницах cshtml.

Чтобы исправить эти проблемы, убедитесь, что вы сделали следующее: Установите библиотеку веб-помощников Asp.NET из Nuget. Откройте файл Web.config проекта и обновите привязки, если они не были обновлены, например, при установке пакетов Nuget.

<dependentAssembly>
  <assemblyIdentity name=”System.Web.Mvc publicKeyToken=”31bf3856ad364e35 />
  <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0 newVersion=”5.2.2.0 />
</dependentAssembly>

Найдите «веб-страницы: Версия» в настройках приложения и обновите его до версии 3.0.0.0. В моем web.config

и я обновил его до

Перезапустите Visual Studio и выполните сборку заново. Возможно, вам придется удалить папку bin для вашего проекта

Посетите это: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/

Раниэль Гарсия
источник
-1

Попробовав все остальное и немного разочаровавшись, я обновил платформу .NET в моем приложении MVC5 с 4.5 до 4.5.2. Как-то это устранило мою проблему. Надеюсь, поможет.

user3520884
источник
-4

Решил заменить в web.config

 <add key="webpages:Enabled" value="false" />

с участием

 <add key="webpages:Enabled" value="true" />
Фабио Маннески
источник
Просто чтобы добавить, почему это было
отвергнуто