Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# @当前上下文中不存在ViewBag_C#_Asp.net Mvc_Razor - Fatal编程技术网

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

C# @当前上下文中不存在ViewBag,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我知道网上已经有一些解决方案了,但在尝试了所有的解决方案后,我自己感到困惑 我只想澄清我尝试过的解决方案: 确保Microsoft.AspNet.Web.Optimization或System.Web.Optimization存在。我在参考文件夹中有System.Web.Optimization。我试图在Nuget中安装Microsoft.AspNet.Web.Optimization,控制台告诉我它已经存在。我想这意味着我已经有了它的参考资料 将命名空间添加到~/Views/Web.confi

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

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

  • 确保
    Microsoft.AspNet.Web.Optimization
    System.Web.Optimization
    存在。我在参考文件夹中有
    System.Web.Optimization
    。我试图在Nuget中安装
    Microsoft.AspNet.Web.Optimization
    ,控制台告诉我它已经存在。我想这意味着我已经有了它的参考资料
  • 将命名空间添加到
    ~/Views/Web.config
    (不是root
    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>
    
    我在网上搜索,其中一个答案告诉我名称空间应该是相同的。我做了,但没有任何改变

  • 确保目标版本。我的目标框架是4.5。我的MVC版本是5.2.0.0。其实我不明白这个解决办法。我试图将框架版本更改为4.5.1,VisualStudio告诉我我的版本实际上是4.5。我想我的目标版本还可以…(实际上我不理解这个解决方案)

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

  • 删除组件模型缓存,然后重新启动Visual Studio。我正在使用VS 2015。我试过了,什么也没发生


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

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

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

    <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>
    
      <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>
    
     <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>
    
    解决方案2:然后,我检查了root
    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>
    
      <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>
    
     <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>
    
    
    
    是那个帮助我的人

    注意在项目文件中加载了razor程序集,对我来说是版本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>
    
    
    真的
    ..\packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll
    
    在/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时,加载失败。所有razor引用都显示为未知(ViewBag、@Html等)
    最后,当我链接同一个版本时,在cshtml编辑器中运行良好;)

    在我做错了一些事情之后,我在MVC5中看到了这一点:我通过模板使用scaffold构建了razor网页UserControl,而不是为MVC5构建默认视图/控制器集。结果一事无成。。但是Views/main目录中额外的2个文件对我没有吸引力。。所以下一步,我删除了两个与网页相关的文件,它们是:Views/Web.config和Views/mycontrol.ascx

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

    我在这里解决了这个问题,恢复了以前生成的Views/Web.config,再次执行网页脚手架。然后,我只删除了/Views中的.ascx web控件,留下了web.config。。保存、关闭和打开VS,重建程序。跑没有问题


    我使用Visual Studio 16.5.4,以及.NET Framework 4.8和MVC 5.2.7.0

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