@ViewBag не существует в текущем контексте - PullRequest
0 голосов
/ 10 октября 2018

Я понимаю, что в Интернете уже есть некоторые решения, но я запутался после того, как попробовал все решения.

Я просто хочу уточнить решения, которые я пробовал:

  1. Убедитесь, что Microsoft.AspNet.Web.Optimization или System.Web.Optimization есть.У меня есть System.Web.Optimization в папке References.Я попытался установить Microsoft.AspNet.Web.Optimization в Nuget, и консоль сказала, что он уже существует.Я думаю, что это означает, что у меня уже есть ссылки.
  2. Добавить пространство имен к ~/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>
    

    и в корне 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.Я использую VS 2015. Я пытался, ничего не происходит.

Я буду выполнять эти решения более точно позже, но я просто хочу знать, есть ли другие решения, которые я пропустил и стоит попробовать.Большое спасибо за помощь !!

1 Ответ

0 голосов
/ 11 октября 2018

После нескольких часов копания.Я решил свою проблему.Мое решение 1 может удалить только КРАСНЫЕ ЛИНИИ, и оно выдало ошибку 500 при запуске отладки Localhost.

Решение 1: Я просто изменил версию с 3.0.0.0 на 2.0.0.0 в коде ниже ~/Views/Web.config:

  <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, это работало без каких-либо проблем.

Эта ссылка мне помогла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...