【问题标题】:The name 'ViewBag' does not exist in the current context当前上下文中不存在名称“ViewBag”
【发布时间】:2011-06-25 00:19:23
【问题描述】:

我正在尝试在我的应用程序中使用 ViewBag,我拥有所有最新的 dll,最新版本的 MVC 3,但我仍然收到错误:

“当前上下文中不存在名称'ViewBag'”

我什至卸载并重新安装了 MVC 3,但没有任何变化。

另外,我不相信 dll 会出现在 GAC 中。

我的问题可能是什么?或者如何将dll添加到GAC?

【问题讨论】:

  • 请记住,对于 5.2.2.0,web.config 应指向 5.2.2.0,但对于 MVC 程序集,Views/web.config 应指向 5.1.0.0

标签: dll asp.net-mvc-3 gac viewbag


【解决方案1】:

对于 MVC5,以防您从头开始构建应用程序。您需要在 Views 文件夹中添加一个 web.config 文件并将以下代码粘贴到其中。

<?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 页面才能看到更改。

【讨论】:

    【解决方案2】:

    正如@Wilson Vallecilla 已经提到的。请按照以下步骤删除缓存:

    请按照以下路径查找文件:

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

    删除所有四个文件:

    • 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\Temporary ASP.NET 文件。

    这对我有用。

    谢谢!

    【讨论】:

      【解决方案3】:

      我已经尝试删除 bin 和 obj 文件并重新启动 VS,但没有运气。

      我也遇到过很多次这个问题,每次都很难解决。这通常是由于 web.config 文件没有引用之一的正确版本。这意味着单击 Visual Studio 中的引用以在属性选项卡中查看版本,然后将其与 web.config 文件中的版本进行匹配。

      另一种方法是(如果可能)升级到更高版本的 .net 框架,然后删除 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 文件中(不是 View 中的那个)

      <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

      在本地运行网站并查看我的第二段修复的任何编译错误(匹配参考的版本)

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题。原来我错过了./Views/Web.config 文件,因为我是从一个空的 ASP.NET 应用程序而不是使用 ASP.NET MVC 模板创建项目的。

        对于 ASP.NET MVC 5,一个普通的 ./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 文件为我解决了这个问题。

        【讨论】:

        • 终于解决了。我没有将 /Views/Web.config 文件部署到服务器,而丢失的文件是导致错误的原因。
        • 第二次回来并使用此解决方案! :)
        • 在浪费了一天的时间试图弄清楚之后,这对我来说是这样。谢谢。我唯一需要添加到“ ./Views/Web.config 中的 标记的是;&lt;add namespace="System.Web.Optimization"/&gt;
        • 就我而言,由于某种原因,这些元素不在根 web.config 中,而是在我创建 MVC5 布局时添加到“视图”下的 web.config 中。我将元素迁移到根 web.config 并删除了 'extra'(??) web.config
        • 伙计,上帝保佑你。我对此感到非常恼火。
        【解决方案5】:

        如果您尝试了所有可用的答案,但仍然找不到答案,这可能会解决问题。 如果您有不同的解决方案配置,例如 Debug、Release 等 然后将项目输出路径设置为“bin”并编译项目。编译后还原更改。

        VS 在 bin 文件夹中查找 dll

        【讨论】:

          【解决方案6】:

          我更新了 ./Views/Web.Config 文件夹下的网页:版本,但此设置也存在于根目录的 web.config 中。更新两者或从根 web.config 中删除

          【讨论】:

            【解决方案7】:

            在尝试了所有方法后,它们都不适合我,因为我所拥有的只是正确的配置。终于

            从系统中删除“temp”和“%temp%”中的所有文件有助于解决此问题。

            打开运行命令(Windows+R)并输入以上字符串并删除所有临时文件。

            【讨论】:

            • 谢谢!在尝试了一切之后,这对我有用。
            【解决方案8】:

            在我的情况下,将网页:版本更改为正确的值解决了我的问题,对我来说正确的值是(2.0.0.0 而不是 3.0.0.0):

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

            【讨论】:

              【解决方案9】:

              尝试不同的东西后,原来是 VS 缓存。您可以通过删除位于以下位置的缓存文件来解决它:

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

              我关闭了我的项目,删除了该路径上的文件并重新打开了我的项目,清理了解决方案并再次构建它,问题就解决了

              下次启动 Visual Studio 时将重新创建文件

              【讨论】:

              • 这在 v15(VS 2017)中也适用于我。我可能从来没有想过这样做...感谢威尔逊和西尔弗节省了大量时间!
              • 通用路径%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
              【解决方案10】:

              在属性对话框中更改应用程序的默认命名空间后,我遇到了这个问题。

              ./Views/Web.Config 包含对旧命名空间的引用

              【讨论】:

              • 是的,它在完全错误的地方给出了一条错误消息。它值得检查是否存在所有 web.config 文件中引用的所有命名空间 - 我在该区域有一个旧命名空间web/config 文件导致很多问题
              【解决方案11】:

              我在 Visual Studio 2015 中升级到 MVC 5 的解决方案中遇到了同样的问题。

              在 Views 文件夹中的 web.config 文件(不是根 web.config)中,我将 &lt;configSections&gt; 中提到的版本号从 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>
              

              【讨论】:

              • 非常感谢!这个版本的东西很疯狂。每次我转身MS升级都是相互的。 Ling to SQL 被 Entity Framework 取代,MVC 已经从 1 到 6,一直在继续。
              • 谢谢,解决了我的 VS2017 问题。
              • 已修复 VS 2019 mvc 5 应用程序。
              【解决方案12】:

              我有一个./Views/Web.Config 文件,但这个错误是在发布网站后发生的。原来文件上的构建操作属性设置为None 而不是Content。将此更改为 Content 允许发布正常工作。

              【讨论】:

                【解决方案13】:

                如果您使用 Visual Studio 2013 并且喜欢使用 MVC 3,则会收到此错误,因为 Visual Studio 2013 本身不支持 MVC 3(即使您更改了 ./Views/web.config),仅支持 MVC 4:@987654321 @

                【讨论】:

                  【解决方案14】:

                  我遇到了同样的问题,crimbo 给了我正确的线索,这是由 ./Views/Web.config 文件引起的,该文件存在但我猜不包含正确的命名空间......

                  我创建了一个空白的 MVC5 项目并将其 ./Views/Web.config 导入到我现有的项目中,每次使用 ViewBag 下的红色波浪都消失了!

                  【讨论】:

                  • Visual Studio 2013 ,创建了选中 MVC 框的空白 Web 项目。它使用最少的 MVC 命名空间引用创建所有文件结构。我添加了一个简单的控制器和视图。我收到编译错误“命名空间‘System.Web.Mvc’中不存在类型或命名空间名称‘Ajax’(您是否缺少程序集引用)”。文件编辑器还显示警告“当前上下文中不存在名称‘ViewBag’”。转到项目引用,找到 System.Web.Mvc,将本地副本设置为 true。清理构建并重建,它解决了我的问题。
                  【解决方案15】:

                  尝试清理并重建。它在我的情况下有效。

                  【讨论】:

                  • 不敢相信我浪费时间想知道我的代码出了什么问题...谢谢它的工作
                  • 真气这行得通……我总是忘记这样做,浪费了这么多时间……应该没有必要
                  • 在我的情况下,我必须从解决方案中删除 packages 文件夹并进行清理
                  【解决方案16】:

                  您需要将特定于 MVC 的 Razor 配置添加到您的 web.config。见这里:Razor HtmlHelper Extensions (or other namespaces for views) Not Found

                  使用MVC 3 upgrade tool 自动确保您拥有正确的配置值。

                  【讨论】:

                  • 谢谢!该链接有帮助!我想这都是在 MVC 3 Beta 上创建站点的结果,然后当您获得最新版本时,Web 配置不会更改。谢谢!
                  • 我已经更新了我的帖子以及相关的修复:stevesmithblog.com/blog/…
                  • 您可以使用升级工具(查看更新的答案)来确保您的配置正确。
                  • 请注意:如果您有其他查看位置,即在正常的~/Views 位置之外,请将~/Views/Web.config 也复制到该位置。
                  猜你喜欢
                  • 2023-03-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-06-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多