2015-03-28 4 views
61

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

screenshot of problem in visual studio 2015

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

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

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

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

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

+0

Когда он все еще работает, это просто ошибка в фоновом режиме компилятора. Попробуйте удалить файл .suo. –

+0

какой проект вы используете? основной? crud, routing? –

+1

@ Хенк к сожалению это не сработало. – Michjuh

ответ

83

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

Это оказалось bad files in the Component Cache, preventing the Razor views from recognising ViewBag, Model, and 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

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

+5

Удивительный, этот исправил проблему для меня. Я также обнаружил, что удаление временных файлов ASP.NET также помогает. C: \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary Файлы ASP.NET – Kevin

+0

Спасибо! ComponentModelCache решил мою проблему –

+0

Это было исправление для меня. Спасибо за сообщение! – Caverman

28

Обновите номера версий в настройках файла 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 файлами в папках «Просмотр».

+4

Это сработало для меня, хотя мне пришлось ввести номер версии 5.2.0.0 вместо 5.2.2.0. Вы можете увидеть, какую версию у вас есть, перейдя по ссылкам> System.Web. MVC и выбрав «Свойства». Спасибо за помощь. – user2233949

+0

@ user2233949, @Benjamin Я использую версию MVC '4.0.0.0', я мог видеть ее из свойств. Какое должно быть исправление в моем случае? – Zeeshan

+0

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

3

Иногда недостаточно изменять номера версий в настройках 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 Team заявили, что они будут добавлять поддержку mvc4 в Visual Studio 2015 с первым обновлением.

-5

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

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

с

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

Это сделало трюк для меня. –

+5

вы не должны этого делать !: http://stackoverflow.com/a/4886130/915865 –

+0

Просто чтобы добавить, почему это было проголосовано - это позволяет видеть реальный вид из браузера. Я считаю, –

-1

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

7

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

Шахта была в нижнем регистре, но не решила мою проблему. –

+0

Святой карп. Это была моя смерть. Я не могу поверить, что вы это обнаружили, @jbwedtech. –

+0

wtf. исправлено и для меня. иметь upvote. – Julien

12

найти «веб-страниц: Version» в appsettings и обновите его до версии 3.0.0.0. Мой web.config был

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

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

<add key=”webpages:Version” value=”3.0.0.0″ /> 
+0

Этот работает для меня, :) – Adrian

+1

Я удалил обе строки (webpages.Version, webpages.Enabled) и , кажется, работает нормально в MVC 5.2 – Grappachu

1

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

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

enter image description here

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

enter image description here

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

enter image description here

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

-1

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

0

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

@{ViewBag.Title = "Title";} 

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

1

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

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

TLDR;

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

sln diff

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

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

  1. обеспечивают .sln файл имеет правильную версию для VS
  2. правой кнопкой мыши MySolution в VS> NuGet Manager> Обновления> запустить все обновления для
  3. щелкните правой кнопкой мыши MySolution в VS> Application > update Target Framework (4.5.2 в моем случае)
  4. исправить любые проблемы с версиями в файлах .config (например, RAZOR до 3.0.0.0)
  5. исправить любые проблемы с кодом в компиляторе (для меня ForEach был неоднозначным)
-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: Имя «View» не существует в текущем контексте

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

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

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

2

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

1

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

+1

Но что должно быть в этом web.config? Не следует ли автогенерировать? _ (обновление) _ Нашел то, что должно было и как оно было создано https://stackoverflow.com/questions/29305914/which-nuget-package-creates-the-web-config-in-your-views-folder/29306208 – drzaus

Смежные вопросы