Имя "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=\&quot;Web\&quot; /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, чтобы увидеть изменения.