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

我试图在我的应用程序中使用ViewBag,我有所有最近的DLL,最新版本的MVC 3,但我仍然得到错误:

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

我甚至卸载,然后重新安装MVC 3,但没有改变。

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

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

您需要将MVC特定的Razorconfiguration添加到您的web.config。 看到这里: 剃刀HtmlHelper扩展(或其他命名空间的意见)未find

使用MVC 3升级工具自动确保您有正确的configuration值。

我遇到了同样的问题。 原来我错过了./Views/Web.config文件,因为我从空的ASP.NET应用程序创build了项目,而不是使用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文件为我解决了这个问题。

尝试清理和重build。 它在我的情况下工作。

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

在Views文件夹(而不是根web.config)的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> 

尝试不同的东西后,事实certificate,这是VScaching。 您可以通过删除位于以下位置的caching文件来解决它:

C:\ Users \用户your.name.here \应用程序数据\本地\微软\ VisualStudio的\ 14.0 \ ComponentModelCache

我closures了我的项目,删除了那条path上的文件,并重新打开了我的项目,清理了解决scheme并重新构build,解决了问题

下次启动Visual Studio时,文件将被重新创build

我有同样的问题,Crimbo给了我正确的线索,这是由./Views/Web.config文件,这是存在的,但没有包含正确的命名空间,我猜…

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

如果你使用Visual Studio 2013,并且喜欢使用MVC 3,那么你会得到这个错误,因为Visual Studio 2013本身不支持MVC 3(甚至是你改变./Views/web.config),只有MVC 4: https:// msdn .microsoft.com / EN-US /库/ hh266747.aspx

我有一个./Views/Web.Config文件,但是这个错误发生在发布站点之后。 原来文件上的build action属性被设置为None而不是Content 。 将其更改为“ Content允许发布function正常工作。

在“属性”对话框中更改“应用程序的默认”命名空间后,出现此问题。

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

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

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

尝试所有的方法后,他们都没有为我工作,因为我拥有的是正确的configuration。 最后

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

打开运行命令(Windows + R)并键入上述string并删除所有临时文件。

如果您尝试了所有可用的答案,仍然无法find答案,这可能会解决问题。 如果您有不同的解决schemeconfiguration,如debugging,发布等,然后将项目输出path设置为“bin”并编译项目。 编译后还原更改。

项目输出路径

VS在bin文件夹中查找dll

我已经尝试删除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> 

最后,在软件包pipe理器控制台中添加update-package

在本地运行网站,看到我的第二段修复的编译错误(匹配版本的引用)

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