我试图在我的应用程序中使用ViewBag,我拥有所有最近的dll,最新版本的MVC 3,但仍然出现错误:
“名称'ViewBag'在当前上下文中不存在”
我什至卸载并重新安装了MVC 3,但没有任何变化。
另外,我不认为该dll在GAC中显示。
我可能是什么问题?或者如何将dll添加到GAC?
Answers:
您需要将MVC专用的Razor配置添加到web.config。参见此处:找不到Razor HtmlHelper扩展(或其他名称空间用于视图)
使用MVC 3升级工具可自动确保您具有正确的配置值。
~/Views
位置之外,也将复制~/Views/Web.config
到该位置。
我遇到了同样的问题。原来我丢失了./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
包含该内容的文件对我来说解决了这个问题。
<add namespace="System.Web.Optimization"/>
在Visual Studio 2015中已升级到MVC 5的解决方案中,我遇到了同样的问题。
在Views文件夹内的web.config文件(而不是根web.config)中,我将<configSections>
from中引用的版本号更新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>
经过尝试不同的东西,原来是VS缓存。您可以通过删除位于以下位置的缓存文件来解决此问题:
C:\ Users \您的名称。此处\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache
我关闭了我的项目,删除了该路径上的文件,然后重新打开了我的项目,清理了解决方案并再次构建它,问题解决了
下次启动Visual Studio时将重新创建文件
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
我遇到了同样的问题,crimbo给了我正确的线索,这是由存在的./Views/Web.config文件引起的,但我猜它不包含正确的名称空间...
我创建了一个空白的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 / library / hh266747.aspx
在“属性”对话框中更改应用程序的“默认”命名空间后,出现了此问题。
./Views/Web.Config包含对旧名称空间的引用
在尝试了所有方法之后,它们都不对我有用,因为我所拥有的都是正确的配置。最后
从系统的“ temp”和“%temp%”中删除所有文件有助于解决此问题。
打开“运行”命令(Windows + R),然后在字符串上方键入并删除所有临时文件。
我已经尝试删除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>
最后,在Package Manager控制台中,添加 update-package
在本地运行该网站,并查看我的第二段所修正的所有编译错误(与参考版本匹配)
正如@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。此处\ AppData \ Local \ Temp \ Temporary ASP.NET文件。
这对我有用。
谢谢!
对于MVC5,如果您要从头开始构建应用程序。您需要将一个web.config文件添加到Views文件夹中,并将以下代码粘贴到其中。
<?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页面才能看到更改。