我正在尝试在我的应用程序中使用ViewBag,我拥有所有最新版本的dll文件和MVC 3版本,但是我仍然收到以下错误:
"当前上下文中不存在'ViewBag'的名称"
我甚至已经卸载并重新安装了MVC 3,但没有任何改变。
此外,我不认为这些dll文件显示在全局程序集缓存(GAC)中。
可能是什么问题?或者如何将dll文件添加到GAC中?
我正在尝试在我的应用程序中使用ViewBag,我拥有所有最新版本的dll文件和MVC 3版本,但是我仍然收到以下错误:
"当前上下文中不存在'ViewBag'的名称"
我甚至已经卸载并重新安装了MVC 3,但没有任何改变。
此外,我不认为这些dll文件显示在全局程序集缓存(GAC)中。
可能是什么问题?或者如何将dll文件添加到GAC中?
我遇到了同样的问题。原来是因为我从一个空的ASP.NET应用程序创建项目,而不是使用ASP.NET MVC模板,导致缺少./Views/Web.config
文件。
对于ASP.NET MVC 5,一个普通的./Views/Web.config
文件包含以下内容:
<?xml version="1.0"?>
<!-- https://dev59.com/42445IYBdhLWcg3wQn8j#19899269 -->
<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"/>
- dunwan您需要向 web.config 文件中添加 MVC 特定的 Razor 配置,具体请参考:Razor HtmlHelper扩展(或其他视图命名空间)未找到
使用MVC 3 升级工具可以自动确保您具有正确的配置值。
~/Views
位置之外的位置,请同样将~/Views/Web.config
复制到该位置。 - Dave Thieben尝试清理并重新构建。在我的情况下它起作用了。
我在一个使用Visual Studio 2015升级到MVC 5的解决方案中遇到了同样的问题。
在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>
关闭项目,删除该路径下的文件,重新打开项目,清理解决方案并再次构建即可解决问题。C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
- fiat我曾经遇到了同样的问题,之后得到了crimbo的正确提示,问题是由于./Views/Web.config文件存在但不包含正确的命名空间导致的,我猜测...
我创建了一个空的MVC5项目,并将其./Views/Web.config导入到我的现有项目中,然后每个ViewBag使用下方的红色波浪线都消失了!
我有一个./Views/Web.Config
文件,但在发布网站后出现了这个错误。原来该文件的构建操作属性设置为None
而不是Content
。将其更改为Content
可以使发布正常工作。
我已经尝试过删除bin和obj文件并重新启动VS,但没有成功。
我也遇到过这个问题很多次,每次解决都很麻烦。通常是由于web.config文件中的某个引用版本不正确所致。这意味着在Visual Studio中点击引用以查看属性选项卡中的版本,然后将其与web.config文件中的版本匹配。
另一种方法是(如果可能)升级到更高版本的.NET Framework,然后删除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>
<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>
<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>
最后,在“程序包管理器控制台”中添加update-package
在本地运行网站并查看任何编译错误,这些错误已由我的第二段修复(匹配引用的版本)
<appSettings>
<add key="webpages:Version" value="2.0.0.0"/>
<add key="webpages:Enabled" value="false"/>