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

时间:2011-02-10 16:56:00

标签: dll asp.net-mvc-3 gac viewbag

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

  

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

我甚至已经卸载然后重新安装了MVC 3但是没有任何变化。

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

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

16 个答案:

答案 0 :(得分:76)

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

答案 1 :(得分:38)

您需要将特定于MVC的Razor配置添加到您的web.config中。见这里:Razor HtmlHelper Extensions (or other namespaces for views) Not Found

使用MVC 3 upgrade tool自动确保您拥有正确的配置值。

答案 2 :(得分:19)

尝试清理和重建。它适用于我的情况。

答案 3 :(得分:7)

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

在Views文件夹(而不是root 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>

答案 4 :(得分:6)

尝试不同的东西之后,事实证明它是VS缓存。您可以通过删除位于以下位置的缓存文件来解决此问题:

  

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

我关闭了我的项目,删除了该路径上的文件并重新打开了我的项目,清理了解决方案并重新构建了问题并解决了问题

下次启动Visual Studio时将重新创建文件

答案 5 :(得分:3)

我遇到了同样的问题,crimbo给了我正确的线索,它是由./Views/Web.config文件引起的,但我没有包含正确的命名空间...

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

答案 6 :(得分:2)

如果您使用Visual Studio 2013并且您喜欢使用MVC 3,则会出现此错误,因为Visual Studio 2013本身不支持MVC 3(即使您更改./Views/web.config),只有MVC 4:{{ 3}}

答案 7 :(得分:2)

我有一个./Views/Web.Config文件但是在发布网站后发生了这个错误。原来,文件上的构建操作属性设置为None而不是Content。将此更改为Content允许发布正常工作。

答案 8 :(得分:1)

在“属性”对话框中更改了应用程序的默认命名空间后,我遇到了这个问题。

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

答案 9 :(得分:1)

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

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

答案 10 :(得分:1)

在尝试了所有方法之后,它们都没有为我工作,因为我所拥有的只是正确的配置。最后

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

打开运行命令(Windows + R)并键入上面的字符串并删除所有临时文件。

答案 11 :(得分:1)

如果您已尝试了所有可用的答案但仍无法找到答案,则可能会解决问题。 如果您有不同的解决方案配置,如调试,发布等 然后将项目输出路径设置为&#39; bin&#39;并编译项目。编译后还原更改。

Project Output Path

VS在bin文件夹中查找dll

答案 12 :(得分:1)

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

最后,在程序包管理器控制台中,添加update-package

在本地运行网站并查看我的第二段(与参考版本匹配)修复的编译错误

答案 13 :(得分:0)

我在./Views/Web.Config文件夹中更新了网页:版本,但此设置也存在于root用户的web.config中。更新两者或从root web.config

中删除

答案 14 :(得分:0)

正如@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 \您的名称。此处\ AppData \ Local \ Temp \临时ASP.NET文件。

这对我有用。

谢谢!

答案 15 :(得分:0)

对于MVC5,如果您要从头开始构建应用程序。您需要将一个web.config文件添加到“视图”文件夹中,然后将以下代码粘贴到其中。

<?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页面才能看到更改。