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

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

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

снимок экрана проблемы в visual studio 2015

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

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

Другие сведения:

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

Спасибо заранее.

4b9b3361

Ответ 1

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

Оказалось, что некоторые плохие файлы в кэше компонентов не позволяют представлениям 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

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

Ответ 2

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

 <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 файлами в папках "Просмотр".

Ответ 3

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

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

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

<add key="webpages:Version" value="3.0.0.0″ />

Ответ 4

Я случайно удалил web.config из папки "Вид", считая, что это не нужно. Когда я вернул его, он начал работать.

Ответ 5

После пробования всего под солнцем выясняется, что что-то изменило мой 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"> 

Ответ 6

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

Ответ 7

Иногда бывает недостаточно изменить номера версий в настройках 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 с первым обновлением.

Ответ 8

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

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

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

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

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

Затем у меня была опция "чистого решения", которую многие другие люди ссылаются на:

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

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

Ответ 9

поздно, но ни один из этих решений не работал у меня.

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

TL;DR;

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

sln diff

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

полные этапы обновления:

  • обеспечить .sln файл имеет правильную версию для VS
  • щелкните правой кнопкой мыши MySolution в VS > Nuget Manager > Обновления > запустите все обновления
  • щелкните правой кнопкой мыши MySolution в VS > Application > update Target Framework (4.5.2 в моем случае)
  • исправить любые проблемы с версиями в файлах .config(т.е. RAZOR до 3.0.0.0)
  • исправить любые проблемы с кодом в компиляторе (для меня ForEach был неоднозначным)

Ответ 10

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

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

Ответ 11

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

Ответ 12

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

@{ViewBag.Title = "Title";}

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

Ответ 13

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

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

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

namespace SampleApp.Controllers
{
    public class UserController {
    }
}

Мои ошибки изменились, изменив Шаг 1 следующим образом:

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

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

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

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

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

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

error CS0103: имя "RedirectToAction" не существует в текущий контекст

error CS0103: Имя "Вид" не существует в текущем контексте

error CS0103: имя "ViewBag" не существует в текущем контексте

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

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

Ответ 14

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

Ответ 16

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

Ответ 17

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

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

с

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