MVC3의 현재 컨텍스트에 'model'이라는 이름이 없습니다.


119

프로젝트에 cshtml 페이지를 추가했습니다. 다음 선언을 추가하려고하면 "현재 컨텍스트에 '모델'이름이 없습니다."라는 오류가 발생합니다.

@model xyz.abc.SomeClass

참조를 확인했는데 모두 제자리에 있습니다. 보기 폴더에 web.config를 추가했지만 수정되지 않았습니다.

내가 놓친 것이 있습니까?


MVC4 솔루션을 찾고 있다면 Adam의 답변이 유효합니다. 기본 web.config에서 올바른 버전 번호를 찾아 여기에서 동일하게 사용해야합니다. MVC4보기 폴더 web.config에 <host> 줄이없고 루트 web.config에서 하나를 복사하여 (다른 값이 다를 수 있으므로 확인하십시오)보기에 넣었습니다. 그런 다음 프로젝트를 닫고 Visual Studio에서 다시로드하면 트릭을 수행했습니다.
Farrukh Subhani

답변:


238

업데이트 : 최신 버전의 MVC를 사용하는 경우 동일한 프로세스가 적용됩니다 <host>. web.config의 행 에서 올바른 버전 번호를 사용해야합니다 .

글쎄, 나는 당신이했던 것과 같은 일을 경험하고 있다는 것을 알았고 조금 더 조사한 후에 나는 문제가 무엇인지 알아 냈습니다!

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를보기 폴더에 복사하는 것이 좋습니다.

중요이 작업을 마치면 파일을 닫았다가 다시 열어야합니다. 짜잔! Intellisense!


1
나는 이것을 답으로 표시 할 수 없지만 이것도 내 문제였습니다. 이러한 섹션을 web.config에 추가하는 것을 잊었습니다.
Dave

그래, 내가 너의 답을 표시 할 수 있으면 좋겠어. 나는 잠시 동안 (Razor로 변환하려는 첫 번째 시도가 실패한 후 포기 함)이 문제를 계속 해결했습니다. 감사!
Brian Donahue 2012

3
나를 위해 작동하지 않습니다. 또는 적어도 가끔은 인텔리 센스가 나오고 때로는 그렇지 않은 경우도 있습니다.이 모든 설정이 Views 폴더의 web.config에 있더라도 말입니다.
Tom Lianza 2012 년

대단히 감사합니다! 그것은 내 하루를 보호했습니다!
Sergey

9
MAINweb.config 파일 에서 최신 버전 (여기 MVC 5 용)으로 업데이트해야 합니다.<add key="webpages:Version" value="3.0.0.0" />
Simon_Weaver 2014 년

30

내 페이지를 구성하기 위해 새 영역을 만들 때 동일한 문제가 발생했습니다. 내 구조는 다음과 같습니다.

WebProject

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

WebProject 아래의 Views 폴더에 생성 된 뷰는 제대로 작동했지만 NewArea 아래에 생성 된 뷰에는 다음 오류가 발생했습니다.

현재 컨텍스트에 'model'이라는 이름이 없습니다.

이 문제를 해결하기 위해 WebProject 아래의 Views 폴더에있는 web.config를 NewArea의 Views 폴더에 복사했습니다. 아래를 참조하십시오.

WebProject

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

추가-> 새 폴더를 사용하여이 새 영역을 수동으로 만들어 폴더를 추가했기 때문에이 문제가 발생했습니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가-> 영역을 선택해야합니다. 그런 다음 Visual Studio는 영역을 올바르게 설정했습니다.


2
+1 ... 난 단지의 Web.config가 포함되지 않았 음을 어떤 이유로, 기뻐 내 문제를 해결하기 위해 답변을 찾을 것으로 나타났습니다
pollirrata

2
오래되었다는 것을 알고 있지만 실제로 오늘도 같은 문제가 있었기 때문에이 답변에 감사드립니다. :)
Ricky Mutschlechner

나도 같은 문제가 있었고 비슷한 해결책이있었습니다. 내 버전 5.0.0.0 Views/Web.config을 참조 System.Web.Mvc.MvcWebRazorHostFactory하고 있었고 v4.0을 참조하는 타사 Area가 있고 뷰가 협력했습니다. 나는 Views/Web.configv4.0으로 다시 설정 했고 모든 것이 작동했습니다.
Hammer와 코드

이 문제를 해결하는 데 도움이 된 Views 폴더의 파일로 web.config를 덮어 쓰는 것에 대한 귀하의 의견이었습니다. 단순히 내용을 똑같이 만드는 것은 어떤 미친 이유로 작동하지 않습니다. AAARRRGGGHHH! ;)
Ryan Vettese 2014 년

제 경우에는 robocopy를 사용하여 모든 web.config 파일을 제외하고 로컬 버전을 서버 버전과 동기화합니다. 서버 버전에 web.config 파일이 없으면이 오류가 나타납니다.
Will Wu

11

뷰가 프로젝트간에 공유 뷰를 재사용하는 데 유용한 클래스 라이브러리 어셈블리에있는 경우 Adam이 제안한대로하는 것만으로는 충분하지 않을 수 있습니다. 나는 그것에도 여전히 문제가 있었다.

프로젝트 루트의 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>

그리고 이것은 view 폴더의 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 프로젝트의 내 뷰에 intellisense가 있고 컴파일 오류가 없습니다.


1
웹 프로젝트의 web.config 파일입니까, 아니면 클래스 라이브러리의 web.config 파일입니까?
theJerm

7

실수로 루트 디렉토리에 경로 / about에 대한보기 파일 (About.cshtml)의 복사본이있을 때이 문제가 발생했습니다. (보기 폴더가 아님) 루트에서 파일을 이동하면 문제가 사라졌습니다.


1
감사합니다! ;-) 난 그냥 같은 문제로 화가 진행되고있는이 대답했다

멋있는! 나는 또한 화가 났던 것을 기억한다. :)
James Lawruk

루트 디렉토리의 폴더에 일부 .cshtml 파일이있어서 뷰의 폴더 만 실패했습니다 ... while (true) {bashHeadToWall; }. 감사.
matt.j.crawford

7

VS2012 및 VS2013을 사용하여 유사한 문제가 발생했습니다.
기본 web.config의 <appSettings>에 다음 줄을 추가하면 작동합니다.

<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

업데이트 : 2015 년 5 월 5 일 MVC 5 프로젝트의 경우 /views/web.config에서 버전을 5.0.0.0으로 설정해야합니다.

<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
문제를 일으키는 5.2.0.0 버전을 찾았지만 5.0.0.0으로 변경하면 해결되었습니다 !!! 감사.
vendettamit

5

다음과 같은 코드를 사용하여 뷰 상단에서 모델을 선언하는 동안 :

@model MyModel

예를 들어 아래에 참조를 대문자로 표기해야합니다.

@Html.Encode(Model.MyDisplayValue)

Views 폴더의 누락 된 web.config가 이의 주요 원인이라고 생각하지만 문제가 해결 되어도 문제가 계속되면 소스에서 참조하기 위해 model 이 아닌 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

System.Web.Razor에 Razor가 있으므로 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에 appsettings 추가로 해결되었습니다. 이것이 <add key="webpages:Version" value="2.0.0.0" />추진 요인 이라고 생각하지만 다른 설정은 필요하지 않습니다.
Shoe

1
MVC 5의 경우 이것이 필요 3.0.0.0하지만 예 이것은 매우 중요합니다!
Simon_Weaver 2014 년

2

끔찍한 실수이지만 :

View at RemoteWeb.config 파일 이 있는지 확인하십시오 . Ftp 프로그램의 필터로 업로드하지 않았을 수 있습니다.


2

Areas / MyArea / Views / web.config에서 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 업데이트 2 에서이 오류가 발생 합니다. 업데이트 1에서는 제대로 작동했습니다. 아직 해결책을 찾지 못했습니다. 업데이트 2를 제거하려고했지만 cshtml 파일을 연 후 VS가 충돌했습니다.
iheartcsharp 2014-06-27

VS2013 업데이트 2에서도 같은 문제가 있습니다.
EricP

0

보기 디렉토리에서 구성 파일을 확인하십시오. MVC 4/5에 대한 키 추가


0

너겟을 다시 설치하면 해결되었습니다.

PM> Install-Package Microsoft.AspNet.Razor-버전 3.2.3


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 솔루션 파일이 존재한다. 희망, 작동합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.