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


89

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

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

我什至卸载并重新安装了MVC 3,但没有任何变化。

另外,我不认为该dll在GAC中显示。

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


1
请记住,对于5.2.2.0,对于MVC组装,web.config应该指向5.2.2.0,但Views / web.config指向5.1.0.0
Bart Calixto 2014年

Answers:


39

您需要将MVC专用的Razor配置添加到web.config。参见此处:找不到Razor HtmlHelper扩展(或其他名称空间用于视图)

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


谢谢!该链接有所帮助!我想这都是由于制作了一个位于MVC 3 Beta上的网站而导致的,然后当您获得最新版本时,Web配置不会更改。谢谢!
2011年

:我已经更新我的职务与这个问题,以及相关的修复stevesmithblog.com/blog/...
ssmith

您可以使用升级工具(请参阅更新的答案)以确保您的配置正确。
marcind 2011年

3
请注意:如果您还有其他视图位置,即在正常~/Views位置之外,也将复制~/Views/Web.config到该位置。
戴夫·蒂本

83

我遇到了同样的问题。原来我丢失了./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包含该内容的文件对我来说解决了这个问题。


3
最后解决。我没有将/Views/Web.config文件部署到服务器,该丢失的文件是导致错误的原因。
Stack Man

2
回来并第二次使用此解决方案!:)
user230910 '16

2
在浪费了一天的时间试图弄清楚之后,这为我做到了。谢谢。我唯一需要添加到“ ./Views/Web.config”中的<namespaces>标记的是; <add namespace="System.Web.Optimization"/>
dunwan

就我而言,由于某种原因,当我创建MVC5布局时,元素不在根web.config中,而是被添加到了“视图”下的web.config中。我将元素迁移到根web.config并删除了“ extra”(??)web.config
JDPeckham

2
杜德,上帝保佑你。我对此感到非常恼火。
Dragan B.


9

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

在Views文件夹内的web.config文件(而不是根web.config)中,我将<configSections>from中引用的版本号更新2.0.0.03.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>

2
非常感谢你!这个版本的东西太疯狂了。每当我转身时,MS升级都是相互影响的。Ling to SQL被Entity Framework取代,MVC从1变为6。
JustJohn

谢谢,解决了我与VS2017有关的问题。
QuickNull

修复了VS 2019 MVC 5应用程序。
MrDywar '19

6

经过尝试不同的东西,原来是VS缓存。您可以通过删除位于以下位置的缓存文件来解决此问题:

C:\ Users \您的名称。此处\ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

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

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


这在v15(VS 2017)中也对我有效。我可能从未想过要这样做...感谢节省大量时间,Wilson&Silver!
Paul Schroeder '18

通用路径%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
法定命令

3

我遇到了同样的问题,crimbo给了我正确的线索,这是由存在的./Views/Web.config文件引起的,但我猜它不包含正确的名称空间...

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


Visual Studio 2013,在选中MVC框的情况下创建了空白Web项目。它使用最少的MVC名称空间引用创建所有文件结构。我添加了一个简单的控制器和视图。我收到了编译错误“名称空间'System.Web.Mvc'中不存在类型或名称空间名称'Ajax'(您是否缺少程序集引用)”。文件编辑器还显示警告“当前上下文中不存在名称'ViewBag'”。转到项目引用,找到System.Web.Mvc,将本地副本设置为true。清理构建并重建,它解决了我的问题。
卡根·阿贡2015年


2

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


1

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

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


是的,它在完全错误的地方给出了错误消息..它值得检查所有web.config文件中是否存在所有引用的命名空间-我在Area的web / config文件中有一个旧的命名空间,导致了很多问题
user230910

1

就我而言,将webpage:Version更改为适当的值可以解决我的问题,对我来说,正确的值是(2.0.0.0而不是3.0.0.0):

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

1

在尝试了所有方法之后,它们都不对我有用,因为我所拥有的都是正确的配置。最后

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

打开“运行”命令(Windows + R),然后在字符串上方键入并删除所有临时文件。


谢谢!经过一切尝试,这对我有用。
user390480

1

如果您尝试了所有可用的答案,但仍然找不到答案,则可能会解决问题。如果您有不同的解决方案配置(如Debug,Release等),则将项目输出路径设置为“ bin”并编译项目。编译后还原更改。

项目输出路径

VS在bin文件夹中查找dll


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>

最后,在Package Manager控制台中,添加 update-package

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


0

我更新了./Views/Web.Config文件夹中的webpages:Version,但此设置也存在于root用户的web.config中。两者都更新或从根web.config中删除


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 \ your.name。此处\ AppData \ Local \ Temp \ Temporary ASP.NET文件。

这对我有用。

谢谢!


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.