Бритва Перегляд кидання "Назва" модель "не існує в поточному контексті"


200

Після значного рефакторингу в моєму додатку MVC 4, і Razor показує цю помилку під час налагодження переглядів:

Назва "модель" не існує в поточному контексті.

Цей рядок коду порушує:

@model ICollection<DataSourceByActive>

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

Чому це відбувається? Як я можу це виправити?


Ключ - "у поточному контексті". Десь дужка не була відкрита чи закрита ... Тож ваше твердження не в тому контексті, як ви думаєте.
Флоріс

1
Чи можете ви додати код контролера разом із деякою вибірковою розміткою того, що ви намагаєтесь зробити?
scniro

Відповіді:


244

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

Створіть новий проект, орієнтований на той самий .NET Framework, і скопіюйте його файл Views / web.config поверх того, що знаходиться у вашому поточному проекті. Це виправить вашу проблему.

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


20
пам’ятайте, що якщо у вашому проекті MVC є області, вони також мають файли Views \ web.config!
Dudeman3000

6
Як не дивно, моя web.config у каталозі переглядів була чудовою, але web.config проекту мала версію веб-сторінок 2.0.0. Виявлення помилкових помилок пішло, коли я зробив це 3.0.0.
Вільям Т. Маллард

43
This will fix your problem.Це не сталося.
Тімві

2
@AnirudhaGupta Питання.
Тімві

1
Я скопіював дійсний файл web.config у свою папку Views, але він не був включений у проект.
Wildcat Matt

104

Переконайтеся , що у вас є такі в обох ваш сайт 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файлі.)


14
Дякую! Для MVC5 номер версії повинен бути 3.0.0.0. (І він існує лише в головному файлі Web.config.)
xec

Це правильна відповідь, яку я б сказав, оскільки я намагався скрізь змінити версію ні, але в кінці кінців це було єдине, що заважало інтелігентності бритви працювати.
Шивам Чопра

6
Це працювало для мене. Мені довелося перезапустити Visual Studio після цієї зміни, щоб все працювало.
Равві

1
У мене була проблема з MVC 5, проблема полягала в тому, що ключ існував, але 2.0.0.0замість нього орієнтувався на версію 3.0.0.0. Змінення, яке вирішило проблему. Дякую!
vaindil

Я використав це і він працював, але я лише додав його до переглядів web.config. Intellisense з’явився відразу після перезавантаження VS.
Метт

48

Ось що я зробив:

  1. Закрити Visual Studio
  2. Видаліть файл SUO
  3. Перезапустіть Visual Studio

Файл .suo - це прихований файл у тій же папці, що і файл рішення .svn, і містить Параметри користувачів Visual Studio.


Так, web.configдля ASP.NET Coreпрограми немає файлу , тому це працювало для мене (також додано деякі розширення для покращеного інтеліссенсу).
VMAtm

2
Мені навіть не довелося видаляти файл SUO. Я щойно закрив і відкрив Visual Studio.
Jim S

Visual Studio 2019: жоден файл суо, видалення .vsпапки не допомогло.
Štěpán Havránek

Дякую .. це зробили це для мене. .net ядра 2,0 MVC додаток
роблема

2
Visual Studio 2019 тут закрийте і знову відкрийте для мене виправлені. Дякую.
JordanGW

26

У мене був той самий випуск, я створив новий проект і скопіював файли web.config, як рекомендовано у відповіді Гупта, але це не виправило для мене. Я перевірив відповідь Алекса та Ліама, я вважав, що цей рядок повинен бути скопійований з нової web.config, але схоже, що в новому проекті цього рядка не було (MVC5):

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

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


Це трапляється, якщо ви оновили з asp.net версії 4.0.0 до 4.5.1. У моєму випадку в моєму основному web.config було показано веб-сторінки: Версія = 2.0.0.0, але вона повинна бути 3.0.0.0. Оновлення цього значення вирішило проблему.
Вейсель Оздемір

15

Зміна наступного рядка в папці 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" />

1
Це працювало і для мене. У мене було оновлено бритву до підтримки C # 6, і MVC, мабуть, також оновився. Перевірте System.Web.Mvcпосилання на збірку, щоб підтвердити основну версію, яка вам потрібна.
Джеймс Вілкінс

У мене була така ж проблема. виправляючи всі збори MVC, Razor і т.д. в web.config до x.0.0.0, знову працювали на мене
mamashare

@JamesWilkins Приємно, працював для мене ти. Лише одне, видаліть файл .suo свого проекту після цього і перезапустіть VS.

гарний улов! Я зіткнувся з цим питанням після того, як я перейшов з .net Framework 4.0 до 4.6 і очевидно вказував на неправильну версію збірки.
прашант

10

У моєму випадку я нещодавно оновив з 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- апі-2

Суть полягає в тому, що вам потрібно перевірити всі посилання на номер вашої версії у своїх web.config та Views / web.config, щоб переконатися, що вони посилаються на правильні оновлені версії, пов’язані з MVC 5.


1
Якщо ви перейшли з MVC 4 до MVC 5, це відповідь для перевірки. Це точно визначає проблеми з версіями, вирішує мою проблему, і мало ризику щось порушити.
Р. Шреурс

10

Змінившись на @Model від @model, зробив роботу за мене.

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


1
Я б хотів, щоб я перестав це забувати! Дякуємо, що нагадали!
Майк

1
Скільки разів мені доводиться шукати це питання, засмучує .. Але я радий, що це просте виправлення!
Брендан Слейк

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 також повинні бути змінені.


6

У моєму випадку наступний код здається корисним. Розмістіть код нижче у файлі 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>

Після оновлення коду обов’язково очистіть та відновіть рішення. Сподіваюсь, це допоможе тобі!


5

Жодна з існуючих відповідей не працювала для мене, але я виявив, що було для мене, порівнявши .csprojфайли різних проектів. Наведене нижче вручну редагування .csprojXML-файлу вирішило для мене проблему інтеграції Razor, можливо, це може допомогти іншому, хто безрезультатно спробував усі інші відповіді. Ключовим моментом є видалення будь-яких екземплярів <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>

Я не знаю, як ті, хто потрапив туди, або що саме вони роблять, можливо, хтось розумніший за мене може додати цю інформацію. Я був просто радий нарешті вирішити цю проблему.


Дякую за пропозицію, це теж спрацювало для мене, з будь-якої причини
Шерлінг

Працював і для мене.
Олексій

Це був єдиний варіант, який працював у моєму випадку. Я перейшов проект vs2010 на 2019 рік і працював як шарм. Після збереження csproj я спробував відкоментувати теги, як оригінальний файл, і він все ще працює ...
jefissu

3

Чомусь мій 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>

3

Я використовував проект MVC4 разом з Visual Studio 2019 - і виявилося, що VS 2019 не підтримує MVC 4 нестандартно. Ви повинні встановити це.

Кроки:

  • Відкрити інсталятор Visual Studio (Шукати інсталятора Visual Studio у Windows)
  • Клацніть окремі компоненти
  • Напишіть "mvc" у вікні пошуку
  • Установіть прапорець mvc4
  • Натисніть "Змінити" праворуч внизу

ПРИМІТКА. Обов'язково для закриття візуальної студії

введіть тут опис зображення


2

У моєму випадку проблема полягала в тому, що після оновлення проекту з 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 почне бити процесор (30-40% використання в режимі очікування) кожного разу, коли я відкриваю файл .cshtml.


2

У мене була така ж проблема при розгортанні в службі додатків Azure

У моєму випадку це було тому, що ~ / Views / Web.config не був включений у проект.

Він працював в IIS Express, але коли я розгорнувся в лазурі, я отримав ту саму помилку. Не включившись у файл .csproj, він не розгорнувся.

Рішення полягало у тому, щоб ~ / Views / Web.config включений у проект.

Якщо ви перейдете до провідника рішень і натисніть значок "Показати всі файли", відкрийте "Перегляди", під яким ви можете побачити невключений файл Web.config.

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


1

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

Також помилок компіляції не було, але про проблему повідомлялося як "попередження". Тому обов'язково прочитайте всі попередження, якщо такі є.


1

Для вирішення цього питання я переконався, що я перейшов до новітньої версії MVC за допомогою консолі NuGet та Package Manager.

Install-Package Microsoft.AspNet.Mvc -Version 5.2.4

Потім оновлено до останньої версії Razor

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

Потім я змінив усі файли web.config, щоб відобразити зміни. Як ви побачите нижче:

У головному файлі web.config переконайтесь, що веб-сторінки: версія правильна. Тут його можна знайти (ігноруйте інші клавіші):

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

Збірка виконання повинна також відображати "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>

І Lastlt є розділ Сторінки Views Web.Config

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

1

якщо ви вирішите цю проблему без будь-яких змін у вашому проекті так само, як я, вам потрібно змінити веб-конфіг, розміщений у папці «Перегляд». просто напишіть новий рядок шляхом введення або видалення порожнього рядка. тоді збережіть свою web.config та відновіть її. моя проблема вирішена цим рішенням


0

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


0

У моєму випадку я пропав @ на початку передбачення

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

Це важливо; Не знаю, чому вас прихильнили.
FlyingV

1
Тому що це не має нічого спільного з початковим питанням.
Райан


-3

Я вирішив проблему, використовуючи @Modelзамість того, щоб просто modelдрукувати змінні.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.