当前上下文中不存在名称为'ViewBag'的变量。

42
我有一台 Windows 2003 R2 服务器。我必须运行一个 .NET MVC3 网站。 我已经安装了所有的运行时(1、2 和 4),我已经安装了所有的 MVC 框架(3 和 4),但是这个错误仍然存在。
我已经将应该在 Views 中的 web.config 放置好了。我已经在 stackoverflow 中找到并尝试了所有的解决方案。我还使用“添加部署依赖项”(右键单击 mvc 项目)在 bin 文件夹中部署了所有的 dll。
现在我不知道还能做什么。已经想不出其他想法或在线解决方案。
我已经卸载并重新安装了所有的运行时、框架等。在我的本地计算机上它运行得很好(Windows 7),但是当我部署时,我会遇到以下错误。
编译器错误消息:CS0103:当前上下文中不存在名称为 'ViewBag' 的内容。
源代码错误: Line 1: @{ Line 2: ViewBag.Title = "Home Page"; Line 3: } Line 4: <h2>@ViewBag.Message</h2>
源文件:d:\FamilyDermMVC\Views\Home\Index.cshtml 行号:2

包含您的web.config和views\web.config(删除任何敏感数据)将非常有帮助。 - Erik Philips
我不了解实际情况,但在我的情况下,我进入属性中选择了先前的目标框架(从4.6到4.5.2),重新编译后所有问题都消失了。然后我又返回到4.6并重复了同样的操作。 - Gianpiero
10个回答

78

看起来你在 Views 文件夹下的 Web.Config 文件缺失以下内容:

/Views/Web.Config

<?xml version="1.0"?>

<configuration>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

      <pages pageBaseType="System.Web.Mvc.WebViewPage"> // <-- this line and contents are important
        <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>

视图通常源自System.Web.Mvc.WebViewPage,该类在web.config中配置。如果您未将DLL与应用程序一起部署,则可以在以下已安装的DLL中找到基类:

Assembly System.Web.Mvc.dll, v4.0.30319

c:\Program Files(x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll

更新1

如果您从MVC X手动升级到MVC Y,并且需要更改目标.NET Framework(例如从4.5到4.6),则如果您有旧引用(指向MVC 5而不是6),那么显然旧文件不能与新文件一起使用(例如,在4.6中无法使用MVC 5 DLL对System.Web进行操作)。


那部分没问题。请阅读我的回答。谢谢。 - Pepito Fernandez
2
对我来说,我的/Views/Web.config被标记为“none”,而不是“content”(用于Build Action)。我进行了更改,重新部署后它就正常工作了。 - Eric Burdo
这就是我的问题所在。我的部署过程跳过了“web.config”,而新站点的第一次部署显然没有复制视图文件夹中的此文件。谢谢! - fischgeek

5

我看到这篇文章是之前发表的,但还是想分享一下我的经验。

在创建一个新的MVC asp.net项目时,我一开始就遇到了同样的错误。我只需点击BUILD -> Clean Solution,然后再Build Solution,问题就解决了。虽然我仍不确定为什么首次生成后就会出现错误。


1
我也来这里说一下。不太确定是什么原因导致我的 VS 出现了这个问题。 - Johnrad

5

我曾经遇到过同样的问题(HTML帮助程序代码无法识别)。

不确定它是如何开始的,但我通过以下操作解决了这个问题:

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

使用

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

在 views web.config 文件中。

我在这里找到了解决方案:链接


3
有时关闭视图、重新构建,再打开视图可以有所帮助。

一样的。我只是复制了我的解决方案文件夹,重新打开了副本,就出现了所有这些错误。直到关闭所有文件,进行清理和重建才消失。 - Christopher

2

尽管在web.config文件中进行了所有正确的配置,我仍然遇到了这个问题。

后来发现是由于组件缓存中的一些坏文件导致Razor视图无法识别ViewBag、Model和HtmlHelpers。删除这些文件可以解决问题(下次打开Visual Studio时会创建这些文件的好版本)。

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

C:\Users\YourUserName\AppData\Local\Microsoft\VisualStudio\<Version>\ComponentModelCache

注意:请将“YourUserName”替换为您的用户名,“<Version>”替换为您的Visual Studio版本号。

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 Files。

这样你就可以解决与视图(Razor MVC)中智能相关的所有错误了。试试看并让我知道它是否对你起作用。

谢谢!

最初的回答

1
似乎有很多解决方案,每个的成功率都不一定。
对我来说,在Views/web.config文件的这一行上更改版本号就可以了。
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

我将4.0.0.0更改为5.0.0.0,保存,关闭解决方案,重新打开,然后就完成了!令人恼火的红色波浪线消失了,智能感知也回来了。

1

好的,我解决了。我不知道具体是什么解决了它,但我猜这整个"9英里"修复了它。

我卸载了所有MVC扩展、工具和其他东西(通过“删除程序”)。

然后重新安装了.NET运行时2和4,而没有删除它们。

接着重新安装了mvc3和mvc4。我去asp.net上找到了最新版本。

然后在我的笔记本电脑上也做了同样的事情。

注意:您需要Power Shell 2.0才能在Windows2003服务器上安装MVC4。您需要找到该服务器的特定下载。

完成后,我回收了应用程序池并重新启动了服务器。

搞定...页面加载成功。

希望这对未来的其他人有所帮助。

虽然谢谢你的答案。

附注:我感觉我的笔记本电脑和服务器上的mvc3(或mvc4)版本(或发布版)不一样。


难道你没有看到我解释了整个过程吗? - Pepito Fernandez

1

Resharper可能是导致这个问题的原因

前往Visual Studio/工具/选项/Resharper 然后点击暂停现在 / 然后 恢复Resharper,你的一天将不再灰暗,但你的Razor窗口可能会有更多的灰色!


0

0
在我的情况下,我遇到了这个问题,因为我试图将一个MVC 3项目运行到支持MVC 2的平台上。
然后我在系统上安装了MVC 3,问题就解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接