【问题标题】:@ViewBag does not exist on current context@ViewBag 在当前上下文中不存在
【发布时间】:2020-09-01 02:41:50
【问题描述】:

我知道网上已经有一些解决方案,但是在尝试了所有解决方案后我自己都感到困惑。

我只是想澄清一下我尝试过的解决方案:

  1. 确保Microsoft.AspNet.Web.OptimizationSystem.Web.Optimization 存在。我在 References 文件夹中有System.Web.Optimization。我尝试在 Nuget 中安装Microsoft.AspNet.Web.Optimization,控制台告诉我它已经存在。我认为这意味着我已经在参考文献中拥有它。
  2. 将命名空间添加到~/Views/Web.config(不是根Web.config)。在我的~/Views/Web.config 我有:

    <system.web.webPages.razor>
       <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, 
       System.Web.Mvc, Version=3.0.0.0, Culture=neutral, 
       PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
     <namespaces>
      <add namespace="System.Web.Helpers"/>
      <add namespace="System.Web.Mvc"/>
      <add namespace="System.Web.Mvc.Ajax"/>
      <add namespace="System.Web.Mvc.Html"/>
      <add namespace="System.Web.Optimization"/>
      <add namespace="System.Web.Routing"/>
      <add namespace="System.Web.WebPages"/>
     </namespaces>
    </pages>
    </system.web.webPages.razor>
    

    在我的根目录Web.config:

    <system.web>
     <machineKey configSource="Config\MachineKey.config"/>
     <httpRuntime targetFramework="4.5" maxRequestLength="20480"/>
     <globalization culture="en-CA" uiCulture="en-CA"/>
     <customErrors mode="Off"/>
     <compilation debug="true" targetFramework="4.5">
      <assemblies>
       <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, 
        PublicKeyToken=b77a5c561934e089"/>
       <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, 
        PublicKeyToken=31BF3856AD364E35"/>
      </assemblies>
     </compilation>
     <pages buffer="true" enableViewState="false">
      <namespaces>
       <add namespace="System.Web.Helpers"/>
       <add namespace="System.Web.Mvc"/>
       <add namespace="System.Web.Mvc.Ajax"/>
       <add namespace="System.Web.Mvc.Html"/>
       <add namespace="System.Web.Optimization"/>
       <add namespace="System.Web.Routing"/>
       <add namespace="System.Web.WebPages"/>
      </namespaces>
     </pages>
    </system.web>
    

    我在网上搜索,其中一个答案告诉我命名空间应该是相同的。我做了,但我没有任何改变。

  3. 确保目标版本。我的目标框架是 4.5。我的 MVC 版本是 5.2.0.0。其实我不明白这个解决方案。我试图将框架版本更改为 4.5.1,Visual Studio 告诉我我的版本实际上是 4.5。我想我的目标版本是OK的......(其实我不明白这个解决方案)

  4. @using System.Web.Optimization 添加到~/Views/Shared/_Layout.cshtml。这让事情发生了。我的@Scripts.Render 现在可以了,但@ViewBag 下面还有一条红线。

  5. 删除 ComponentModelCache 并重新启动 Visual Studio。我正在使用 VS 2015。我试过了,没有任何反应。

我稍后会更准确地执行这些解决方案,但我只想知道是否还有其他我错过的解决方案值得尝试。非常感谢您的帮助!!

【问题讨论】:

  • 是部署你的网站后出现还是只是编译器说viewbag不存在?
  • @JohnEphraimTugado 感谢您的回复。我刚刚从我们的 TFS 源服务器下载,还没有部署。构建后,在错误列表面板上,它显示了这些错误。但是,构建会成功。

标签: c# asp.net-mvc razor


【解决方案1】:

经过几个小时的挖掘。我解决了我的问题。我的解决方案 1 只能删除红线,当我运行 Localhost 调试时它给了我 500 错误。

解决方案 1: 我只是在~/Views/Web.config 的以下代码中将版本从 3.0.0.0 更改为 2.0.0.0:

  <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>

当我将所有版本更改为 2.0.0.0 时,红线消失了,但出现 500 错误。这意味着system.web.webPages.razor 正确加载到_Layout.cshtml

据我了解,如果system.web.webPages.razor 版本不正确,我的~/Views/Web.config 的以下设置不会加载:

  <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.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" />
    <add namespace="System.Web.Optimization" />
  </namespaces>
</pages>
</system.web.webPages.razor>

解决方案 2: 然后,我检查了 root Web.config 中的以下部分代码:

 <connectionStrings configSource="Config\ConnectionStrings-dev.config" />
<appSettings>
  <add key="webpages:Version" value="2.0.0.0" />
  <add key="webpages:Enabled" value="false" />
  <add key="PreserveLoginUrl" value="true" />
  <add key="ClientValidationEnabled" value="true" />
  <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

webpages:version 是 2.0.0.0。我将其更改为 3.0.0.0 以匹配 ~/Views/Web.config 中的版本,重新启动 Visual Studio,它可以正常工作。

这个link 是帮助我的人。

【讨论】:

    【解决方案2】:

    注意在你的项目文件中加载了一个剃须刀程序集,对我来说它是第 2 版:

        <Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <Private>True</Private>
      <HintPath>..\packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
    </Reference>
    

    在 /Views/Web.config 中指出了另一个版本,即版本 3:

        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
    

    当 VS cshtml 编辑器尝试加载时,版本 3 的加载失败。所有剃刀引用都比未知数出现(ViewBag、@Html 等) 最后,当我链接相同的版本时,在 cshtml 编辑器中都可以正常运行;)

    【讨论】:

      【解决方案3】:

      在我做错事后,我在 MVC5 中看到了这个:我通过模板使用脚手架搭建了一个剃须刀 WebPage UserControl,而不是为 MVC5 搭建了默认的视图/控制器集。结果没有做任何事情..但是 Views/ 主目录中的结果额外的 2 个文件对我没有吸引力.. 所以.. 下一步我删除了两个与 WebPages 相关的文件,它们是:Views/Web.config 和 Views/mycontrol .ascx

      在那之后,我重建了我的解决方案,尝试在 VS 中调试.. 并遇到了上述问题。在主页 .cshtml 上找不到 ViewBag!

      我在这里通过恢复以前生成的 Views/Web.config 解决了这个问题,方法是再次执行 WebPages 脚手架。然后,我删除了 /Views 中的 .ascx Web 控件,保留了 Web.config.. 保存,关闭并打开 VS,重建程序。跑。没有问题。

      我使用 Visual Studio 16.5.4、.NET Framework 4.8 和 MVC 5.2.7.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        相关资源
        最近更新 更多