@ViewBag在当前上下文中不存在

时间:2018-10-10 20:15:19

标签: c# asp.net-mvc razor

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

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

  1. 确保Microsoft.AspNet.Web.OptimizationSystem.Web.Optimization在此处。我在“引用”文件夹中有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。我想我的目标版本还可以。...(实际上我不理解此解决方案)

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

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

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

3 个答案:

答案 0 :(得分: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

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

  <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:然后,我在根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是帮助我的人。

答案 1 :(得分:0)

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

loss.backward(torch.ones(batch_size)) 

在/Views/Web.config文件中,指向了另一个版本:版本3:

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

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

答案 2 :(得分:0)

在我做错了一些事情之后,我已经看到了这个与MVC5的结合:我通过模板通过脚手架来搭建一个剃须刀网页用户控件,而不是为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结合使用