프로젝트에 cshtml 페이지를 추가했습니다. 다음 선언을 추가하려고하면 “현재 컨텍스트에 ‘모델’이름이 없습니다.”라는 오류가 발생합니다.
@model xyz.abc.SomeClass
참조를 확인했는데 모두 제자리에 있습니다. 보기 폴더에 web.config를 추가했지만 수정되지 않았습니다.
내가 놓친 것이 있습니까?
답변
업데이트 : 최신 버전의 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!
답변
내 페이지를 구성하기 위해 새 영역을 만들 때 동일한 문제가 발생했습니다. 내 구조는 다음과 같습니다.
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는 영역을 올바르게 설정했습니다.
답변
뷰가 프로젝트간에 공유 뷰를 재사용하는 데 유용한 클래스 라이브러리 어셈블리에있는 경우 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가 있고 컴파일 오류가 없습니다.
답변
실수로 루트 디렉토리에 경로 / about에 대한보기 파일 (About.cshtml)의 복사본이있을 때이 문제가 발생했습니다. (보기 폴더가 아님) 루트에서 파일을 이동하면 문제가 사라졌습니다.
답변
VS2012 및 VS2013을 사용하여 유사한 문제가 발생했습니다.
기본 web.config의 <appSettings>에 다음 줄을 추가하면 작동합니다.
<add key="webpages:Version" value="3.0.0.0" />
라인이 이미 있지만 2.0.0.0이라고 말한 경우 3.0.0.0으로 변경하면 작동합니다.
답변
업데이트 : 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>
답변
다음과 같은 코드를 사용하여 뷰 상단에서 모델을 선언하는 동안 :
@model MyModel
예를 들어 아래에 참조를 대문자로 표기해야합니다.
@Html.Encode(Model.MyDisplayValue)
Views 폴더의 누락 된 web.config가 이의 주요 원인이라고 생각하지만 문제가 해결 되어도 문제가 계속되면 소스에서 참조하기 위해 model 이 아닌 Model 을 사용하고 있는지 확인 하십시오.