Razor View throwing "Название" модель "не существует в текущем контексте"

После значительного рефакторинга в моем приложении MVC 4, и Razor показывает эту ошибку при отладке Views:

Название "модель" не существует в текущем контексте.

Это оскорбительная строка кода:

@model ICollection<DataSourceByActive>

Я знаю, что использование @model правильно.

Почему это происходит? Как я могу это исправить?

Ответ 1

Я думаю, что вы испортили файл web.config, который находится в папке Views.

Создайте новый проект, ориентированный на ту же платформу .NET, и скопируйте его файл Views/web.config поверх файла в текущем проекте. Это решит вашу проблему.

Кроме того, как прокомментировал Dudeman3000, если у вас есть области в вашем проекте MVC, у них всех тоже есть файлы Views\web.config.

Ответ 2

Убедитесь, что у вас есть следующее на вашем сайте Web.config и в каталоге просмотров Web.config в разделе appSettings

<add key="webpages:Version" value="2.0.0.0" />

Для MVC5 используйте:

<add key="webpages:Version" value="3.0.0.0" />

(И он существует только в основном файле Web.config.)

Ответ 3

Вот что я сделал:

  • Закрыть Visual Studio
  • Удалить файл SUO
  • Перезапустить Visual Studio

Файл .suo является скрытым файлом в той же папке, что и файл решения .svn, и содержит пользовательские параметры Visual Studio.

Ответ 4

У меня была такая же проблема, я создал новый проект и скопировал файлы web.config, как рекомендовано в ответ Gupta, но это не помогло мне. Я проверил ответ Алекса и Лиама, я думал, что эта строка, вероятно, была скопирована из нового web.config, но похоже, что у нового проекта не было этой строки (MVC5):

<add key="webpages:Version" value="3.0.0.0" />

Добавление строки в файл views/web.config решило проблему для меня.

Ответ 5

Изменение следующей строки в папке просмотра web.config разрешило ту же ошибку.

С

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Для

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Ответ 6

В моем случае я недавно обновился с MVC 4 до MVC 5, что очень сильно замаскировало web.config. Эта статья очень помогла.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

Суть в том, что вам нужно проверить все ссылки на номера версий в вашем web.config и Views/web.config, чтобы убедиться, что они ссылаются на правильные обновленные версии, связанные с MVC 5.

Ответ 7

Я нашел решение. Если вы хотите обновить версию бритвы или mvc 4 до 5, измените некоторые строки.

Старый код в Views/web.config

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

Заменено

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

sectionGroup тоже должно быть изменено.

Ответ 8

Переход на @Model с @model сделал работу за меня.

@model представляет тип объекта View Model. @Model представляет объект View Model.

Ответ 9

В моем случае следующий код окажется полезным. Поместите ниже код в файл 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>

</configSections>

После обновления кода обязательно очистите и перестройте решение. Надеюсь, это поможет вам!

Ответ 10

Ни один из существующих ответов не работал для меня, но я обнаружил, что сделал для меня, сравнив файлы .csproj различных проектов. Следующее ручное редактирование XML файла .csproj решило проблему Razor-intellisense для меня, возможно, это может помочь кому-то, кто пробовал все остальные ответы безрезультатно. Ключ должен удалить любые экземпляры <Private>False</Private> в <Reference>:

<ItemGroup>
  <Reference Include="Foo">
    <HintPath>path\to\Foo</HintPath>
    <!-- <Private>False</Private> -->
  </Reference>
  <Reference Include="Bar">
    <HintPath>path\to\Bar</HintPath>
    <!-- <Private>True</Private> -->
  </Reference>
</ItemGroup>

Я не знаю, как эти люди попали туда и чем именно они занимаются, может быть, кто-то умнее меня может добавить эту информацию. Я был просто счастлив, наконец, решить эту проблему.

Ответ 11

По какой-то причине мой web.config содержал 0.0.0.0 в атрибуте oldVersion:

<runtime>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
</runtime>

было выбрано 1.0.0.0 :

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>

Ответ 12

Для меня проблема была противоречивой версией .NET в одной из недавно импортированных библиотек. Библиотека, которую я импортировал, была скомпилирована для 4.5.2, а сайт ASP.NET MVC импортировал ее в целевой 4.5. После перекомпиляции lib для 4.5 сайт будет компилироваться.

Кроме того, ошибок компиляции не было, но проблема сообщалась как "предупреждение". Поэтому не забудьте прочитать все предупреждения, если они есть.

Ответ 13

В моем случае проблема заключалась в том, что после обновления проекта с MVC 4 до MVC 5 я как-то пропустил изменение версии в Views/web.config:

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

У него все еще была старая версия 2.0.0.0. После изменения версии до 3.0.0.0 все начало работать правильно.

Кроме того, из-за этой проблемы Visual Studio 2015 Community Edition начнет избивать CPU (30-40% использования на холостом ходу) каждый раз, когда я открою файл .cshtml.

Ответ 14

У меня была та же проблема при развертывании в службе приложений Azure

В моем случае это произошло потому, что ~/Views/Web.config не был включен в проект.

Это работало в IIS Express, но при развертывании на Azure я получил ту же ошибку. Не будучи включенным в файл .csproj, он не был развернут.

Решением было обеспечить включение ~/Views/Web.config в проект.

Если вы перейдете в обозреватель решений и нажмете значок "Показать все файлы", а затем откройте "Виды", там вы можете увидеть не включенный файл Web.config.

Добавьте его, переиздайте и покажите своему дяде.

Ответ 15

Я пытался добавить представление, которое находилось за пределами моей папки "Views" (только для моего кода, по-моему, по-моему), когда у меня была эта проблема. Создание представления внутри представлений (по соглашению) разрешило его.

Ответ 16

В моем случае я отсутствовал @в начале foreach

    @foreach (var item in Model)
    {
        <tr class="clickable-row">
            <td class="clickable-field">
                @Html.DisplayFor(modelItem => item.Label)
            </td>
            <td class="clickable-field hidden-xs">
                @Html.DisplayFor(modelItem => item.Value)
            </td>
        </tr>
    }

Ответ 17

Чтобы решить эту проблему, я удостоверился, что обновил до последней версии MVC, используя NuGet и Package Manager Console.

Пакет установки Microsoft.AspNet.Mvc -Version 5.2.4

Затем обновлен до последней версии Razor

Пакет установки Microsoft.AspNet.Razor -Version 3.2.4

Затем я изменил все файлы web.config, чтобы отразить это изменение. Как вы увидите ниже:

В основном файле web.config убедитесь, что версия webpages: правильная. Здесь его можно найти (игнорируйте другие ключи):

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

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

<system.web>
    <compilation debug="true" targetFramework="4.6">
        <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
</system.web>

Runtime AssemblyBinding также должна показывать "newversion", смотрите, где он читает NewVersion 5.2.4.0? Но также проверьте все другие версии.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Затем в разделе Views Web.Config убедитесь, что Razor является правильной версией:

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

И, наконец, есть раздел "Страницы" веб-интерфейса "Представления".

    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>

Ответ 18

если вы решите эту проблему без каких-либо изменений в вашем проекте, как я, вам нужно изменить ваш web.config, который находится в папке просмотра. просто введите новую строку с помощью Enter или Удалить пустую строку. затем сохраните ваш web.config и пересоберите. моя проблема решена с этим решением

Ответ 19

В моем случае я случайно удалил файл web.config из папки Views. Я добавил его обратно, и все было в порядке.

Ответ 20

Вы ДОЛЖНЫ перезапустить Visual Studio, чтобы любые изменения в этих ответах вступили в силу!

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

Ответ 21

Я решил проблему, используя @Model вместо model при печати переменных.

Ответ 22

Скорее всего, вы будете использовать в коде переменную с именем model.