Имя ViewBag не существует в текущем контексте - PullRequest
84 голосов
/ 10 февраля 2011

Я пытаюсь использовать ViewBag в своем приложении, у меня есть все последние библиотеки DLL, последняя версия MVC 3, но все же я получаю сообщение об ошибке:

«Имя»ViewBag 'не существует в текущем контексте "

Я даже удалил, а затем переустановил MVC 3, и все же изменений нет.

Кроме того, я не верю, что DLL появляются в GAC.

В чем может быть моя проблема?Или как добавить DLL в GAC?

Ответы [ 15 ]

76 голосов
/ 11 ноября 2013

У меня была такая же проблема.Оказалось, что мне не хватает файла ./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, содержащего это содержимое, решило эту проблему для меня.

38 голосов
/ 10 февраля 2011

Вам необходимо добавить специфичную для MVC конфигурацию Razor в ваш web.config.См. Здесь: Расширения Razor HtmlHelper (или другие пространства имен для представлений) не найдены

Используйте инструмент обновления MVC 3 , чтобы автоматически убедиться, что у вас есть нужные значения конфигурации.1007 *

19 голосов
/ 18 марта 2013

Попробуйте очистить и восстановить.Это сработало в моем случае.

7 голосов
/ 31 августа 2015

У меня была та же проблема в решении, которое было обновлено до 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>
6 голосов
/ 11 февраля 2016

Попробовав разные вещи, оказалось, что это VS кеш.Вы можете решить эту проблему, удалив файлы кэша, расположенные в:

C: \ Users \ your.name.here \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

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

Файлы будут воссозданы при следующем запуске Visual Studio

3 голосов
/ 18 декабря 2013

У меня была та же проблема, и Crimbo дал мне правильную подсказку, это было вызвано файлом ./Views/Web.config, который присутствовал, но не содержал правильных пространств имен, я думаю ...

Iсоздал пустой проект MVC5 и импортировал его ./Views/Web.config в мой существующий проект, и красные волны при каждом использовании ViewBag исчезли!

2 голосов
/ 24 февраля 2015

У меня был файл ./Views/Web.Config, но эта ошибка произошла после публикации сайта. Оказывается, свойство действия сборки для файла было установлено на None вместо Content. Изменение этого параметра на Content позволило публикации работать корректно.

2 голосов
/ 26 января 2015

Если вы используете Visual Studio 2013 и вам нравится использовать MVC 3, вы получите эту ошибку, потому что Visual Studio 2013 не поддерживает MVC 3 изначально (даже если вы меняете ./Views/web.config), только MVC 4: https://msdn.microsoft.com/en-us/library/hh266747.aspx

1 голос
/ 08 ноября 2017

Я уже пытался удалить bin и obj файл и перезапустить VS, но безуспешно.

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

Другой способ (если это возможно) обновить до более поздней версии..NET Framework, а затем удаляет файлы bin / obj и перезапускает Visual Studio.Я могу только предположить, что это что-то меняет в

Быстрая проверка различий между файлом 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

Запустите веб-сайт локально и посмотрите все ошибки компиляции, которые были исправлены моим вторым абзацем (соответствуетверсии ссылок)

1 голос
/ 27 октября 2016

Если вы перепробовали все доступные ответы и все еще не можете найти ответ, это может решить проблему. Если у вас есть разные конфигурации решений, такие как Debug, Release и т. Д. затем установите выходной путь проекта в «bin» и скомпилируйте проект. Отменить изменения после компиляции.

Project Output Path

VS ищет dll в папке bin

...