【问题标题】:The name 'ViewBag' does not exist in the current context - Visual Studio 2015当前上下文中不存在名称“ViewBag”-Visual Studio 2015
【发布时间】:2015-06-01 20:57:52
【问题描述】:

我再次开始在 ASP.NET 中进行开发,但在 Visual Studio 中遇到了一个小错误。我的 .cshtml 文件在使用一些 razor 函数时显示错误。例如“当前上下文中不存在名称‘ViewBag’”。这是一张图片:

我正在使用一个演示项目。你可以在这里找到项目:https://github.com/Wintellect/Angular-MVC-Cookbook/tree/master/BasicProject

我查看了其他几个线程,大多数建议更新 web.config 文件。这 2 个配置文件已经存在,因为它是一个非常流行的演示,我假设它包含所有必需的配置。我当然查看了这些配置文件,它们确实包含建议的解决方案。

其他细节:

  • 我已经在解决方案上使用了 clean & rebuild,但没有任何改变。
  • 当我创建一个全新的 MVC 项目时,它确实可以工作
  • 我的朋友遇到了同样的问题,我们都使用 VS 2015 和 Windows 10
  • 我仍然可以运行该应用程序并且它确实有效。

提前致谢。

【问题讨论】:

  • 当它仍然运行时,它只是后台编译器中的一个错误。尝试删除 .suo 文件。
  • 你在运行哪个项目?基本的 ? crud,路由?
  • @Henk 不幸的是这不起作用。
  • @Prashant 我已经尝试了基本项目和路由项目。这两个问题都存在。
  • 你解决了吗?我有同样的问题@Michjuh

标签: c# asp.net-mvc visual-studio razor web-config


【解决方案1】:

尽管配置正确,但我还是遇到了这个问题。

原来是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

我随后在其他几台开发人员机器上看到了同样的问题,此修复程序很快解决了它。

【讨论】:

  • 太棒了,这解决了我的问题。我还发现删除临时 ASP.NET 文件也有帮助。 C:\Users\your.name.here\AppData\Local\Temp\Temporary ASP.NET Files
  • 这也是我的解决方法。感谢发帖!
  • 这解决了我将 .net 4 升级到 4.5.2 并将 mvc 3 升级到 5 引起的问题
  • 我的文件夹是 15.0_7e8de76c\ComponentModelCache for VS 2017。
  • 这个解决方案也非常适合 VS 2019,不要忘记关闭 VS 然后再打开,以便缓存建立在正确的版本控制上。此外,views/web.config 和 main web.config 中的 MVC 版本应该相同。 System.Web.WebPages.Razor 的相同规则。
【解决方案2】:

更新 Views 文件夹中 web.config 文件设置中的版本号。

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

如果你已经通过nuget更新了MVC版本,应该是:

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

其他依赖版本也可能需要更新。 MVC 帮助程序和对象的视图中的编译和命名空间问题通常与视图文件夹中混乱的 web.config 文件有关。

【讨论】:

  • 这对我有用,尽管我必须输入版本号 5.2.0.0 而不是 5.2.2.0。您可以通过转到 References > System.Web.MVC 并选择 Properties 来查看您拥有的版本。感谢您的帮助
  • @user2233949, @Benjamin 我正在使用 MVC 版本 4.0.0.0,我可以从属性中看到它。我的情况应该怎么解决?
  • 检查所有的 web.config 文件并确保它们都使用正确的主机版本。有时,当您在概览文件夹中覆盖了设置时,问题可能会在没有得到纠正的情况下溜走。
  • 我尝试了所有其他建议,但这个建议使用 5.2.3.0 对我有用。谢谢本杰明
  • 这对我来说是正确的答案。同样在更改 web.config 后,不要忘记关闭所有 *.cshtml*.vbhtml 文件并清理并重建解决方案。 VS 2019 16.1.2
【解决方案3】:

我不小心从Views 文件夹中删除了web.config,认为这是不必要的。当我把它放回去时,它开始工作了。

【讨论】:

    【解决方案4】:

    在 appsettings 中找到“webpages:Version”并将其更新到版本 3.0.0.0。我的 web.config 有

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

    我将其更新为

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

    【讨论】:

    • 我删除了这两行(webpages.Version、webpages.Enabled)并且在 MVC 5.2 中似乎工作正常
    • 这应该在两个版本的 Web.config、项目根目录和任何区域的 Web.configs 中更新。
    • 谢谢。就我而言,有问题的标签位于 - - 我需要更改
      使用版本 =3.0.0.0
    • 删除任何地方的缓存(包括Temporary ASP.NET Files)没有帮助,但这个答案确实
    • 这个设置甚至意味着是什么意思?它对应什么?你如何确定你的应用依赖哪个版本?
    【解决方案5】:

    在尝试了一切之后,结果发现 something 已将我的 /Views/Web.Config 中的 System.Web.WebPages.Razor &lt;sectionGroup&gt; 从正确的 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"> 
    

    【讨论】:

    • 我的都是小写,但没有解决我的问题。
    • 圣鲤鱼。这也是我的宿命。我不敢相信你发现了这个,@jbwedtech。
    • 我也有这些小写的,改变大小写并没有解决问题。
    【解决方案6】:

    我多次遇到这个问题,最后我发现它的发生是因为视图文件夹应该包含它是自己的 web 配置

    【讨论】:

    • 但是那个 web.config 应该是什么?不应该是自动生成的吗? (更新) 找到了它应该有的东西以及它是如何生成的stackoverflow.com/questions/29305914/…
    • 是的,你是对的,在我的项目中,Web.Config 之前并不存在(是的,它应该自动生成,但是从以前的开发人员那里获取了一个项目,不知道他为什么删除它)。为 Views 文件夹添加 Web.Config 文件后,它起作用了。
    【解决方案7】:

    有时在 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 团队宣布他们将在第一次更新时将 mvc4 支持添加到 Visual Studio 2015。

    【讨论】:

      【解决方案8】:

      在我的情况下,我只在我的 PC 上为一个项目发生了这个问题。我的项目在 VS2012 中运行良好,但在 VS2017 中打开时出现此问题。

      对我来说,这里的主要问题是缓存。我的项目指向 Razor 和 MVC 的较旧缓存版本的 dll,它没有找到在较新版本中添加的功能,例如 ViewBag。 ViewBag 是在 Razor 版本 3 中添加的,但因为我缓存了 Razor 版本 2,所以它找不到 ViewBag(但它可以找到版本 2 中存在的其他内容)。但是,像在接受的答案中那样简单地清除缓存并不能解决我的问题。我们不得不将配置文件更改为 Razor 的“使用版本 3 而不是 2”和 MVC 的“使用版本 5 而不是 4”,然后关闭 VS,删除缓存,打开项目并重建。然后事情就解决了。以下是更详细的说明。

      以下是帮助我解决问题的一系列更改:

      1. 在“视图”文件夹的 Web.config 中更改所有位置
        • MVC 版本设置为 4.0.0.0 到 5.0.0.0
        • Razor 版本设置为 2.0.0.0 到 3.0.0.0

      以下是我的例子:

      <sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
          <section name="host" type="... Version=3.0.0.0 ..." .../>
          <section name="pages" type="... Version=3.0.0.0 ..." .../>
      </sectionGroup>
      ...
      <host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
      ...
      <pages
          ...
          pageParserFilterType="... Version=5.0.0.0 ..."
          pageBaseType="... Version=5.0.0.0 ..."
          userControlBaseType="... Version=5.0.0.0 ...">
          <controls>
              <add assembly="... Version=5.0.0.0 ..." ... />
          </controls>
      </pages>
      

      (注释:1)您的版本可能不同,我只是在说明在我的情况下需要做什么 2)为简洁起见,我省略了一些带有“...”的内容 3)即使您有 MVC类似 5.3.2.0 的版本,您仍应输入 5.0.0.0,与 Razor 的版本相同 - 在 3.0.0.0 中输入全零)

      1. 在主配置文件(位于顶层的那个)中,将 webPages:version 从 2.0.0.0 更改为 3.0.0.0。

      2. 此更改可能不会影响解决方案,但我仍然会提到它。确保“Views”文件夹的 &lt;namespaces&gt; 部分与项目根目录下的主 .conifg 文件的内容完全相同,例如:

      <namespaces>
          <add namespace="System.Web.Helpers" />
          <add namespace="System.Web.Mvc" />
          <add namespace="System.Web.Mvc.Ajax" />
          <add namespace="System.Web.Mvc.Html" />
          <add namespace="System.Web.Optimization" />
          <add namespace="System.Web.Routing" />
          <add namespace="System.Web.WebPages" />
      </namespaces>
      
      1. 最后,关闭VS。删除%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache(或任何您的正确路径)中的所有缓存文件,就像芬顿(当前)接受的答案中所建议的那样。还要删除 .scan 文件,即使该答案中没有提到它。完成后,打开 VS,清理您的项目并重建它。事情应该现在可以工作了。它对我有用。

      【讨论】:

      • 谢谢。在升级到 MVC 5 后,这对我的 MVC 4 应用程序有用。无论出于何种原因,这些文件都没有使用新版本号进行编辑。这应该是最佳答案。
      【解决方案9】:

      游戏迟到了,但这些解决方案都不适合我。

      我升级到 VS 2017,网站运行正常,但 Visual Studio 编译器破坏了大部分 .cshtml 文件

      TLDR;

      mysolution.sln 的版本错误

      所以您想用较新的 VS 创建一个新的解决方案,并将其与您的比较并复制版本信息。

      完整升级步骤:

      1. 确保 .sln 文件具有正确的 VS 版本
      2. 在 VS 中右键单击 MySolution > Nuget Manager > 更新 > 运行所有更新
      3. 右键单击 VS 中的 MySolution > 应用程序 > 更新目标框架(在我的情况下为 4.5.2)
      4. 修复 .config 文件中的任何版本问题(即 RAZOR 到 3.0.0.0)
      5. 修复编译器中的任何代码问题(对我来说,ForEach 是模棱两可的)

      【讨论】:

      • 我的项目是在 VS2013 中启动的,当我点击 VS2017 时,我开始看到这些错误,但一切编译正常,所以我试图弄清楚发生了什么,但并不太难。由于打开视图会产生大量错误,因此这已成为一个问题。我现在在 VS2019 上,偶然发现了你的修复;你摇滚!我的 .sln 有 14.0.25123.0,应该是 16.3.9。我还修复了框架的任何版本问题。我不必更新 nuget 包(谢天谢地),因为我没有时间全面测试所有更新。
      【解决方案10】:

      我已经为此浪费了一个工作日。我尝试了此(和其他)帖子中的所有内容,但无济于事。最终我发现我需要以不同的方式打开项目。我刚刚将现有网站升级到 Visual Studio 2015、MVC5、.NET 框架 4.5.2 并且正在使用 Windows 10,但怀疑每个软件应用程序的其他版本的答案都是相同的。

      所以这是我选择打开网站的菜单选项:

      我使用这个菜单选项打开了定义项目的 csproj 文件,而不是这个:

      然后我有许多其他人提到的“干净的解决方案”选项:

      但是,我什至不需要这个 - 一切正常!好吧,无论如何,我继续下一组问题......

      【讨论】:

        【解决方案11】:

        我已经通过

        添加了控制器
        • 第 1 步:添加 > 类
        • 第 2 步:用户控制器
        • .
        • .
        • .

        已创建相应代码:

        namespace SampleApp.Controllers
        {
            public class UserController {
            }
        }
        

        通过将第 1 步更改为:

        • 第 1 步:添加 > 控制器
        • 第 2 步:用户控制器
        • .
        • .
        • .

        已创建相应代码:

        namespace SampleApp.Controller {
            public class UserController : Controller {
            }
        }
        

        问题是: 我没有从 Controller

        继承我的类

        包括我的错误中的其他消息 - 所有这些都来自这个问题:

        错误 CS0117:“ModelState”不包含“IsValid”的定义

        错误 CS0103:名称“RedirectToAction”不存在于 当前上下文

        错误 CS0103:当前上下文中不存在名称“视图”

        错误 CS0103:当前上下文中不存在名称“ViewBag”

        错误 CS0103:名称“Json”在当前上下文中不存在

        希望此更改可以帮助那些在初始步骤中没有注意的人。

        【讨论】:

          【解决方案12】:

          在尝试了该主题(和其他)的每个解决方案/技巧的至少 90% 之后,我终于解决了!剧透警报,没有任何逻辑痕迹是以下所谓的“解决方案”:在所有选项卡关闭的情况下运行解决方案终于奏效了,当没有其他任何东西可以让我幸免于“当前上下文中不存在 ViewBag&Co”时...你已经被警告过了,不要胡思乱想!

          希望有一天它会对某人有所帮助^^

          【讨论】:

            【解决方案13】:

            将其关闭然后重新打开对我有用。 您可以尝试重新启动 Visual Studio。

            【讨论】:

            • 听起来像是一个笑话答案,但这对我来说是固定的。 耸耸肩
            【解决方案14】:

            我能够通过将以下内容添加到我的 .cshtml 页面顶部来解决此问题

            @{ViewBag.Title = "Title";}
            

            重新编译后,我能够删除这一行并且错误消失了。

            【讨论】:

              【解决方案15】:

              我的一种观点遇到了类似的问题。就我而言,我只是清理了解决方案并尝试重建它及其工作。

              【讨论】:

                【解决方案16】:

                以下链接可以帮助您。

                It will show you what could be the problem

                它解决了我的问题。不知何故,我从视图文件夹中删除了我的 web.config 文件。

                【讨论】:

                  【解决方案17】:

                  我遇到了同样的问题。我尝试了清理、构建和重建解决方案,但对我不起作用。

                  所以最后我做了如下:

                  1. Windows 键 + R
                  2. 输入 %temp%
                  3. 点击Enter
                  4. 删除所有文件(如果少数文件未删除,则没有问题)

                  希望它也适用于你们。

                  【讨论】:

                    【解决方案18】:

                    在将我的一个客户应用程序从 ASP MVC 4 升级到 ASP MVC 5 后,我们在 cshtml 页面中遇到了与 Html Helpers 和 ViewBag 相关的设计器错误。

                    要解决这些问题,请确保执行以下操作: 从 Nuget 安装 Asp.NET Web Helpers 库 打开项目的 Web.config 并更新绑定,如果它们在安装 Nuget 包时没有更新,例如

                    <dependentAssembly>
                      <assemblyIdentity name=”System.Web.Mvc” publicKeyToken=”31bf3856ad364e35″ />
                      <bindingRedirect oldVersion=”0.0.0.0-5.2.2.0″ newVersion=”5.2.2.0” />
                    </dependentAssembly>
                    

                    在 appsettings 中找到 “webpages:Version” 并将其更新到版本 3.0.0.0。我的 web.config 有

                    我将其更新为

                    重新启动 Visual Studio 并重建。您可能需要删除项目的 bin 文件夹

                    访问: https://lajak.wordpress.com/2014/11/16/asp-mvc-5-viewbag-does-not-exist-in-the-current-context/

                    【讨论】:

                      【解决方案19】:

                      在尝试了所有其他方法并感到有些沮丧之后,我将 MVC5 应用程序上的 .NET 框架从 4.5 升级到了 4.5.2。不知何故,它解决了我的问题。希望对您有所帮助。

                      【讨论】:

                        【解决方案20】:

                        我在 web.config 中解决了替换问题

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

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

                        【讨论】:

                        • 只是为了补充为什么这被否决 - 它允许从我相信的浏览器中看到实际视图
                        猜你喜欢
                        • 2016-05-01
                        • 2011-06-25
                        • 2023-03-09
                        • 1970-01-01
                        • 1970-01-01
                        • 2012-08-17
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多