当前上下文中不存在名称“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=\"Web\" /optionInfer+"/> </compilers> </system.codedom>
最后,在软件包pipe理器控制台中添加update-package
在本地运行网站,看到我的第二段修复的编译错误(匹配版本的引用)
我更新了网页:./Views/Web.Config文件夹下的版本,但是此设置也存在于web.config中的根目录中。 更新两者或从根web.config中删除