Имя "ViewBag" не существует в текущем контексте
Я пытаюсь использовать ViewBag в своем приложении, у меня есть все последние DLL, последняя версия MVC 3, но все же я все еще получаю сообщение об ошибке:
"Имя" ViewBag "не существует в текущем контексте"
Я даже удалил, а затем снова установил MVC 3, но никаких изменений не произошло.
Кроме того, я не считаю, что DLL появляется в GAC.
Что может быть моей проблемой? Или как добавить DLL в GAC?
Ответы
Ответ 1
Вам нужно добавить конфигурацию Razor, специфичную для MVC, в ваш web.config. См. Здесь: Razor HtmlHelper Расширения (или другие пространства имен для просмотров) Не найдено
Используйте инструмент обновления MVC 3, чтобы автоматически убедиться, что у вас есть правильные значения конфигурации.
Ответ 2
У меня была такая же проблема. Оказалось, что я отсутствовал в файле ./Views/Web.config
, потому что я создал проект из пустого приложения ASP.NET вместо использования шаблона ASP.NET MVC.
Для ASP.NET MVC 5 файл vanilla ./Views/Web.config
содержит следующее:
<?xml version="1.0"?>
<!-- https://stackoverflow.com/a/19899269/178082 -->
<configuration>
<configSections>
<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">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
Добавление файла ./Views/Web.config
, содержащего это содержимое, устраняет эту проблему для меня.
Ответ 3
Попробуйте очистить и перестроить. Он работал в моем случае.
Ответ 4
У меня была та же проблема в решении, которое было обновлено до MVC 5 в Visual Studio 2015.
В файле web.config в папке Views (а не в корневом web.config) я обновил номер версии, указанный в <configSections>
от 2.0.0.0
до 3.0.0.0
.
<configuration>
<configSections>
<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">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
Ответ 5
После того, как вы попробуете разные вещи, выясняется, что это был кэш VS. Вы можете решить эту проблему, удалив файлы кеша, расположенные в:
C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14,0\ComponentModelCache
Я закрыл свой проект, удалил файлы по этому пути и снова открыл свой проект, очистил решение и снова построил его, и проблема была решена.
Файлы будут воссозданы при следующем запуске Visual Studio
Ответ 6
У меня была такая же проблема, и crimbo дал мне правильный ключ, это было вызвано файлом. /Views/Web.config, который присутствовал, но не содержал правильные пространства имен, которые, я думаю...
Я создал пустой проект MVC5 и импортировал его. /Views/Web.config в свой существующий проект, и красные волны при каждом использовании ViewBag исчезли!
Ответ 7
Если вы используете Visual Studio 2013, и вам нравится использовать MVC 3, вы получаете эту ошибку, потому что Visual Studio 2013 не поддерживает MVC 3 изначально (даже если вы меняете. /Views/web.config), только MVC 4: https://msdn.microsoft.com/en-us/library/hh266747.aspx
Ответ 8
У меня был файл ./Views/Web.Config
, но эта ошибка произошла после публикации сайта. Оказывается, свойство свойства сборки в файле было установлено None
вместо Content
. Изменение этого параметра на Content
позволило издателю работать правильно.
Ответ 9
У меня возникла эта проблема после изменения пространства имен приложений по умолчанию в диалоговом окне "Свойства".
В файле. /Views/Web.Config содержится ссылка на старое пространство имен
Ответ 10
В моем случае, сменив веб-страницу: Version на правильное значение, решила мою проблему, для меня было правильное значение (2.0.0.0 вместо 3.0.0.0):
<appSettings>
<add key="webpages:Version" value="2.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
Ответ 11
После пробования всех подходов никто из них не работал у меня, так как у меня были правильные конфигурации. наконец,
Удаление всех файлов из "temp" и "% temp%" из системы помогло решить эту проблему.
Откройте команду "Выполнить" (Windows + R) и введите надстрочные строки и удалите все временные файлы.
Ответ 12
Если вы попробовали все доступные ответы и до сих пор не можете найти ответ, это может решить проблему.
Если у вас разные конфигурации решений, такие как Debug, Release и т.д.
затем установите путь вывода проекта в "bin" и скомпилируйте проект. Отменить изменение после компиляции.
![Путь вывода проекта]()
VS ищет DLL в папке bin
Ответ 13
Я уже пытался удалить файл bin и obj и перезапустить VS и не повезло.
У меня также была эта проблема много раз, и мне больно решать каждый раз. Часто это связано с тем, что файл web.config не имеет правильной версии одной из ссылок. Это означает, что щелкните ссылку в Visual Studio, чтобы увидеть версию на вкладке свойств, а затем сопоставить ее с версией в файлах web.config.
Другим способом является (если возможно) обновление до более поздней версии .net-структуры, а затем удаление файлов bin/obj и перезапуск Visual Studio. Я могу только предположить, что он что-то меняет в
Быстрая проверка diff между файлом csproj на самом деле не показывает какого-либо существенного различия... Но различия, которые он показывал, были (я добавил (удалить), чтобы показать старую строку)
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
В файле Web.Config(а не в представлении)
<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>
Он также добавил (к тому же файлу web.config), но я вручную удалил его
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
Наконец, в консоли диспетчера пакетов добавьте update-package
Запустите веб-сайт локально и просмотрите любые ошибки компиляции, которые были исправлены моим вторым абзацем (соответствующие версиям ссылок)
Ответ 14
Я обновил веб-страницы: Версии в папке. /Views/Web.Config, но этот параметр также присутствовал в web.config в корне. Обновить оба или удалить из корневого web.config
Ответ 15
Как уже упоминалось @Wilson Vallecilla. Пожалуйста, выполните следующие шаги, чтобы удалить кеш:
Пожалуйста, следуйте ниже пути, чтобы найти файлы:
C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
Delete all four files:
- Microsoft.VisualStudio.Default.cache
- Microsoft.VisualStudio.Default.catalogs
- Microsoft.VisualStudio.Default.err
- Microsoft.VisualStudio.Default.external
Я закрыл свой проект, удалил файлы по этому пути и снова открыл мой проект, очистил решение и собрал его снова, и проблема была решена
Удаление ваших временных файлов ASP.NET также помогает. C:\Users\your.name.here\AppData\Local\Temp\Временные файлы ASP.NET.
Это работает для меня.
Спасибо!
Ответ 16
Для MVC5, если вы создаете приложение с нуля. Вам нужно добавить файл web.config в папку Views и вставить в него следующий код.
<?xml version="1.0"?>
<configuration>
<configSections>
<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">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
Обратите внимание, что для MVC 3 вам придется изменить версию на 3.0.0.0 на
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
Возможно, вам придется закрыть и снова открыть страницу *.cshtml, чтобы увидеть изменения.