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

efl*_*ing 86 dll gac viewbag asp.net-mvc-3

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

"当前上下文中不存在'ViewBag'这个名称"

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

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

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

cri*_*mbo 78

我遇到了同样的问题.原来我错过了./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>
Run Code Online (Sandbox Code Playgroud)

添加./Views/Web.config包含此内容的文件可以解决此问题.

  • 终于解决了.我没有将/Views/Web.config文件部署到服务器,并且丢失的文件是导致错误的原因. (3认同)
  • 谢谢,最后是一个对我有用的解决方案! (2认同)
  • 回来并第二次使用此解决方案!:) (2认同)
  • 在浪费了一天的时间试图弄清楚之后,这为我做到了。谢谢。我唯一需要添加到“ ./Views/Web.config”中的&lt;namespaces&gt;标记的是;`&lt;add namespace =“ System.Web.Optimization” /&gt;``。 (2认同)
  • 杜德,上帝保佑你。我对此感到非常恼火。 (2认同)

mar*_*ind 38

您需要将特定于MVC的Razor配置添加到web.config中.请参阅此处:未找到Razor HtmlHelper Extensions(或其他视图命名空间)

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

  • 请注意:如果您有其他视图位置,即在正常的`〜/ Views`位置之外,也可以将`〜/ Views/Web.config`复制到该位置. (3认同)

小智 19

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


Jon*_*ell 7

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

在视图文件夹(未根web.config)内web.config文件,我更新中提到的版本号<configSections>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>
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢你!这个版本的东西很疯狂.每次我转身MS升级都是相互影响.Ling to SQL被Entity Framework取代,MVC从1开始逐渐变为6. (2认同)

小智 6

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

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

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

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