Подтвердить что ты не робот

Имя "модель" не существует в текущем контексте в MVC3

Я добавил в проект страницу cshtml. Когда я попытался добавить в него следующее объявление, я получаю сообщение об ошибке: "Имя" модель "не существует в текущем контексте".

@model xyz.abc.SomeClass

Я проверил ссылки, все они на месте. Я добавил папку просмотра web.config, но это не исправило.

Есть ли что-то, чего я не вижу?

4b9b3361

Ответ 1

Обновление. Если вы используете более новую версию MVC, применяется тот же процесс, просто обязательно используйте правильный номер версии в строке web.config <host>.

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

Вам нужно включить файл MVC3 по умолчанию для папки Views. 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 в вашу папку представлений.

Важно После того, как вы это сделали, вам нужно закрыть файл и снова открыть его. Вуаля! Intellisense!

Ответ 2

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

WebProject

  • [] Области
    • [] NewArea
      • [] Контроллеры
      • [] Представления
  • [] Контроллеры
  • [] Просмотров
    • Web.config
  • Web.config

Представления, созданные в папке "Представления" в WebProject, отлично работали, но представления, созданные под NewArea, вывели следующую ошибку: "В этом контексте" модель "не существует". Чтобы исправить это, я скопировал файл web.config в папке "Представления" в WebProject в папку "Представления" в NewArea. См. Ниже.

WebProject

  • [] Области
    • [] NewArea
      • [] Контроллеры
      • [] Просмотров
        • Web.config
  • [] Контроллеры
  • [] Просмотров
    • Web.config
  • Web.config

Я столкнулся с этим, потому что вручную создал новую область с помощью Add → New Folder для добавления папок. Я должен щелкнуть правой кнопкой мыши проект и выбрать Add → Area. Затем Visual Studio позаботилась о правильной настройке области.

Ответ 3

Если ваши представления находятся в сборке библиотеки классов, что полезно для повторного использования общих представлений среди проектов, то просто делать то, что предлагает Адам, может быть недостаточно. У меня все еще были проблемы даже с этим.

Попробуйте это в своем 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>

Это сработало для меня. Теперь у меня есть intellisense и нет компиляции ошибок в моих представлениях в проекте, отличном от MVC, который затем я могу ссылаться на нескольких веб-сайтах MVC.

Ответ 4

Я столкнулся с этой проблемой, когда у меня случайно была копия файла вида (About.cshtml) для маршрута/в корневом каталоге. (Не папка представлений). Как только я переместил файл из корня, проблема исчезла.

Ответ 5

Были проблемы с использованием VS2012 и VS2013.

Добавление следующей строки в <appSettings> в основном web.config работал:

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

Если строка уже была там, но сказал 2.0.0.0, сменил ее на 3.0.0.0.

Ответ 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>

Ответ 7

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

@model MyModel

вам нужно использовать ваши ссылки ниже, например:

@Html.Encode(Model.MyDisplayValue)

Я считаю, что отсутствующий файл web.config в папке Views будет основной причиной этого, но если это исправлено и проблема по-прежнему сохраняется, убедитесь, что вы используете Модель, а не model, чтобы ссылаться на него в источнике.

Ответ 8

Я столкнулся с этой проблемой. Мои обстоятельства были немного разными.

  • Одна из моих папок просмотра была случайно перенесена в корневой каталог проекта. Это приведет к маршруту project_root/SignUp/ViewName совпадение перед project_root/Views/SignUp/ViewName. Это вызвало ошибку @model.

  • После перемещения представлений в соответствующее место каталог был каким-то образом воссоздан в корне проекта. На этот раз, пусто. /SignUp/ViewName работал, но /SignUp/ выбрал ошибку 403 - Forbidden: Access is denied.. Вся папка должна быть удалена из корня проекта.

Надеюсь, это поможет кому-то. Я потратил несколько часов, полагая, что проблема была вызвана нашим недавним обновлением от MVC 3 до MVC 4. Просто обратите внимание: проблемы обновления должны возникать только между MVC 2 и MVC 3. Если вы видите эту проблему в более поздних версиях, это, вероятно, не из-за обновить.

Ответ 9

Мне потребовалось много времени, чтобы решить эту проблему, но, наконец, я надеюсь, что я решил это на 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}.

Вот и все.

Ответ 10

Это ужасная ошибка, но:

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

Ответ 11

Есть и еще одна причина. В моем случае я скопировал файл index.cshtml в веб-корневую папку (вне папки "Представления" ) в качестве резервной копии с удаленного сервера.

Итак, я продолжал изменять свой /views/web.config, постоянно меняя свой /views/home/index.cshtml, и ошибка продолжалась... до тех пор, пока не обнаружил /index.cshtml вне папки представлений, удалил его и конечно, все вернулось к норме!

Ответ 12

Я столкнулся с этой же проблемой, но в моем случае единственное, что изменилось, это то, что я удалил Visual Studio 2012 и установил Visual Studio 2013. Я открыл наше решение, но я продолжал получать те же The name 'model' does not exist in current context ошибка в каждом представлении Razor.

Мой коллега предложил проверить обновления для VS2013. После того, как я установил VS2013 Update 1, я прекратил эту ошибку.

Ответ 13

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

Ответ 14

Переустановка nuget решила его для меня

PM > Установочный пакет Microsoft.AspNet.Razor -Version 3.2.3

Ответ 15

Для меня это была проблема. Этот блок отсутствовал в разделе.

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

Ответ 16

У меня такая же проблема после обновления пакетов. Я сделал весь материал, который вы написали выше в этом разделе, но красная основа ключевого слова модели не исчезла. Позже найденное решение: только удаленная папка пакета из моего проекта dir и перестроена, тем временем разрешена NuGet для восстановления отсутствующих пакетов. Обновлено, и все сделано!

Ответ 17

Проверьте, что ваш файл web.config должен существовать в опубликованных файлах

Ответ 18

У меня возникла одна и та же проблема, и я нашел решение. Решение:

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

Файл .suo является скрытым файлом в той же папке, где существует файл решения .svn. Надеюсь, это сработает!