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


119

Я додав сторінку cshtml у проект. Коли я спробував додати до неї наступну декларацію, я отримую помилку: "Назва" модель "не існує в поточному контексті".

@model xyz.abc.SomeClass

Я перевірив посилання, всі вони на місці. Я додав web.config у папку перегляду, але це не виправлено.

Що-небудь мені не вистачає?


Якщо ви шукаєте рішення MVC4, відповідь Адама є дійсною, вам потрібно знайти правильний номер версії у вашому головному web.config та використати тут же. У папці MVC4 Folder web.config відсутній рядок <host> і копіюється з кореневого web.config (у нього можуть бути інші значення, тому перевірте ваше), і помістивши його у Views. Потім ми закрили проект і перезавантажили його у Visual Studio, і це зробило свою справу.
Farrukh Subhani

Відповіді:


238

Оновлення: Якщо ви використовуєте більш нову версію MVC, застосовується той самий процес, просто не забудьте використати правильний номер версії у рядку web.config <host>.

Ну, я виявив, що переживаю те саме, що ви робили, і після трохи подальших досліджень я дізнався, в чому проблема!

Для папки Views потрібно включити MVC3 web.config за замовчуванням. MVC3 має два: один у корені для вашої програми та один у папці перегляду. У цьому розділі є включені простори імен. Будьте впевнені, що ваш виглядає приблизно так:

  <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.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

Я пропоную вам створити новий проект MVC3, а потім просто скопіювати створену для вас web.config у папку переглядів.

Важливо Після цього вам потрібно закрити файл і знову відкрити його. Вуаля! Інтеллісенс!


1
Я не можу відзначити це як відповідь, але це була і моя проблема. Забули додати ці розділи до web.config.
Дейв

Так, хочу, щоб я міг позначити твою як відповідь. Я на цьому затримався на деякий час (здався після моєї першої спроби конвертації в Razor не вдався), і ця проблема була протягом усього часу. Дякую!
Брайан Донаху

3
Не працює для мене. Або, принаймні, іноді я отримую інтелігенцію, а іноді - ні, хоча у мене все це встановлено у web.config у папці Views.
Том Ліанса

Велике спасибі! Це захистило мій день!
Сергій

9
не забудьте оновити до останньої версії (для MVC 5 тут) у вашому MAINфайлі web.config<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver

30

Я зіткнувся з цим самим питанням, коли створив нову область для організації своїх сторінок. Моя структура виглядала так:

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
- [] Controllers
- [] Views
    - Web.config
- Web.config

Перегляди, створені в папці "Перегляди" під веб-проектом, спрацювали чудово, але представлення, створені під NewArea, призвели до такої помилки:

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

Щоб виправити це, я скопіював web.config у папку Views під веб-проектом у папку Views в NewArea. Дивись нижче.

WebProject

- [] Areas
    - [] NewArea
        - [] Controllers
        - [] Views
            - **Web.config**
- [] Controllers
- [] Views
    - Web.config
- Web.config

Я зіткнувся з цим, тому що я вручну створив цю нову область, використовуючи Додати -> Нова папка, щоб додати папки. Я повинен був клацнути правою кнопкою миші проект і вибрав Додати -> Область. Тоді Visual Studio подбав би про те, щоб правильно налаштувати зону.


2
+1 ... Я щойно помітив, що чомусь не включено web.config, радий, що знайшов вашу відповідь, щоб вирішити мою проблему
pollirrata

2
Я усвідомлюю, що це по-старому, але в мене насправді була та сама проблема, тому я хотів сказати подяку за цю відповідь. :)
Ricky Mutschlechner

У мене була та сама проблема, і подібне рішення. Моє Views/Web.configбула посилання System.Web.Mvc.MvcWebRazorHostFactoryверсії 5.0.0.0, і у мене був третій сторона площа реферування v4.0 і думка співпраці. Я Views/Web.configповернувся до v4.0 і все працювало.
Коди з Hammer

саме цей ваш коментар щодо заміни web.config на той, з папки Views, допоміг мені це виправити. просто зробити вміст точно таким же не працює з божевільних причин. AAARRRGGGHHH! ;)
Ryan Vettese

У моєму випадку я використовую робокопію для синхронізації локальної версії з версією сервера, виключаючи всі файли web.config. без файлу web.config у версії сервера ця помилка з’явиться.
Буде Ву

11

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

Спробуйте це у своєму web.config у корені проекту:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <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>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
  <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>
  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <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.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

І це в web.config у папці перегляду:

<?xml version="1.0"?>

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

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.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" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

Це працювало для мене. Зараз у мене є інтелігенція та відсутність помилок компіляції у моїх поглядах у проекті, що не стосується MVC, на яку я можу звертатися з кількох веб-сайтів MVC.


1
Це для файлів web.config у вашому веб-проекті чи файлів web.config у вашій бібліотеці класів?
theJerm

7

Я зіткнувся з цією проблемою, коли ненароком у кореневому каталозі була копія файлу перегляду (About.cshtml) для маршруту / про. (Не папка перегляду) Після того, як я перемістив файл із кореня, проблема усунулася.


1
Дякую! Я щойно з’їхав з розуму від тієї ж проблеми, і це була відповідь ;-)
Роб

Класно! Я також пам’ятаю, що з глузду з’їхав. :)
Джеймс Лоурук

У мене було декілька файлів .cshtml у папці у кореневому каталозі, що спричинило збій лише папки в моїх уявленнях ... while (true) {bashHeadToWall; }. Дякую.
matt.j.crawford

7

Мали подібні проблеми із використанням VS2012 та VS2013.
Додавши наступний рядок до <appSettings> в головному web.config працював:

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

Якщо рядок вже був, але сказав 2.0.0.0, змінивши його на 3.0.0.0 працювало.


Це було моєю проблемою і після оновлення MVC. Він сказав 2.0.0.0, змінивши на 3, він працював.
FerX32

6

Оновлення: 5/5/2015 Для вашого проекту MVC 5 вам потрібно встановити Версію 5.0.0.0 у /views/web.config

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

1
Yup знайшов версію 5.2.0.0, яка викликає проблему, але змінивши її на 5.0.0.0 виправила її !!! Дякую.
вендетаміт

5

Поки ви заявляєте модель у верхній частині подання, використовуючи такий код:

@model MyModel

вам потрібно використовувати великі посилання на нього нижче, наприклад:

@Html.Encode(Model.MyDisplayValue)

Я вважаю, що відсутня web.config у папці Views була б основною причиною цього, але якщо це виправлено, і проблема все ще зберігається, перевірте, що ви використовуєте Model , а не модель для посилання на нього в джерелі.


1
Це вирішує помилку, коли проблема полягає в тому, що ви намагаєтеся посилатись на свою модель у власному коді у представленні, як, наприклад, коли ви робите власного помічника, який не покладається на лямбда-вирази тощо.
JohnC

3

Я також зіткнувся з цією проблемою. Мої обставини були дещо інші.

  1. Одна з моїх папок перегляду була випадково переміщена до кореневого каталогу мого проекту. Це призводить до відповідності маршруту project_root/SignUp/ViewNameраніше project_root/Views/SignUp/ViewName. Це спричинило @modelпомилку.

  2. Після переміщення поглядів у відповідне місце каталог було якось відтворено у корені проекту. Цього разу порожньо. /SignUp/ViewNameпрацював, але /SignUp/кинув 403 - Forbidden: Access is denied.помилку. Вся папка повинна бути віддалена від кореня проекту.

Я сподіваюся, що це комусь допоможе. Я витратив години, вважаючи, що проблема була викликана нещодавним оновленням з MVC 3 до MVC 4. Просто зауваження: проблеми з оновленням мають виникати лише між MVC 2 та MVC 3. Якщо ви бачите цю проблему на пізніших версіях, вона, ймовірно, не пов’язана з оновлення.


2

Щоб вирішити це питання, мені знадобилися віки, але, нарешті, я сподіваюся, що я вирішив це на MVC, тобто подібне:

Я перевстановив ASP.NET 4.5 ( http://www.asp.net/downloads )

Я дотримувався підручника з оновлення на http://www.asp.net/whitepapers/mvc4-release-notes

Але цей згаданий параграф для мене неправильний

System.Web.Mvc, Version=4.0.0.0
System.Web.WebPages, Version=2.0.0.0
System.Web.Helpers, Version=2.0.0.0
System.Web.WebPages.Razor, Version=2.0.0.0

Оскільки у мене є Razor в System.Web.Razor , я змінив простір імен бритви на System.Web.Razor.

Додайте це до свого web.config

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

Я додав посилання на збірку до всіх цих збірок вище

Знайдіть елемент ProjectTypeGuids та замініть {E53F8FEA-EAE0-44A6-8774-FFD645390401} на {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

Це все.


1
Додаток додатків до webconfig вирішив це для мене. Хоча я думаю, що <add key="webpages:Version" value="2.0.0.0" />це рушійний фактор, інші налаштування не потрібні.
Взуття

1
для MVC 5 це має бути, 3.0.0.0але так, це дуже важливо!
Simon_Weaver

2

Це жахлива помилка, але:

Переконайтеся , що у вас є Web.config файли в View в Remote . Можливо, ви пропустили, щоб завантажити його фільтрами програми Ftp.


2

Мені не вистачало web.config під областями / MyArea / Views / web.config. Одного разу додавши, це працювало чудово. Це було з MVC 5 та .NET4.5


Міна також відсутня, за допомогою цього сайту я знову працював. forums.asp.net/t/…
Perposterer

0

Є й інша причина. У моєму випадку я скопіював файл index.cshtml у веб-кореневу папку (поза папкою Views) як резервну копію з віддаленого сервера.

Отже, я продовжував змінювати /views/web.config, продовжував змінювати /views/home/index.cshtml і помилка продовжувалась… доки не знайшла /index.cshtml поза папкою перегляду, видалила його і впевнено, це все повернулося до нормального!


0

Я зіткнувся з цією самою проблемою, але в моєму випадку єдине, що змінилося, це те, що я видалив Visual Studio 2012 і встановив Visual Studio 2013. Я відкрив наше рішення, але я постійно отримував однакову The name 'model' does not exist in current contextпомилку в кожному перегляді Razor.

Мій колега запропонував перевірити наявність оновлень на VS2013. Після того, як я встановив оновлення VS2013 1 , я перестав отримувати цю помилку.


1
Я отримую цю помилку з VS2013 Update 2 . З оновленням 1 працювало чудово. Ще не змогли знайти рішення для цього. Я спробував видалити оновлення 2, але це призвело до збоїв VS після відкриття файлу cshtml.
iheartcsharp

У мене така сама проблема з оновленням VS2013 2.
EricP

0

Перевірте свій конфігураційний файл у каталозі переглядів. додайте ключ для MVC 4/5



0

Для мене це було питання. Весь цей блок відсутній у розділі.

  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </assemblies>

0

У мене виникла та сама проблема після оновлення пакетів. Я зробив цілий матеріал, про який ви писали вище в цій темі, але червоний підстав ключового слова моделі не зник. Пізніше знайшли рішення: щойно видалили папку «пакет» з реєстру мого проекту та відновили її, тим часом дозволили NuGet відновити відсутні пакети. Оновлено, і це зроблено!



0

Я зіткнувся з тим же питанням, і тоді я знаходжу рішення. Рішення таке:

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

Файл .suo - це прихований файл у тій самій папці, де існує файл рішення .svn . Сподіваюся, це спрацює!

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