프로젝트에 cshtml 페이지를 추가했습니다. 다음 선언을 추가하려고하면 "현재 컨텍스트에 '모델'이름이 없습니다."라는 오류가 발생합니다.
@model xyz.abc.SomeClass
참조를 확인했는데 모두 제자리에 있습니다. 보기 폴더에 web.config를 추가했지만 수정되지 않았습니다.
내가 놓친 것이 있습니까?
프로젝트에 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!
MAIN
web.config 파일 에서 최신 버전 (여기 MVC 5 용)으로 업데이트해야 합니다.<add key="webpages:Version" value="3.0.0.0" />
내 페이지를 구성하기 위해 새 영역을 만들 때 동일한 문제가 발생했습니다. 내 구조는 다음과 같습니다.
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는 영역을 올바르게 설정했습니다.
Views/Web.config
을 참조 System.Web.Mvc.MvcWebRazorHostFactory
하고 있었고 v4.0을 참조하는 타사 Area가 있고 뷰가 협력했습니다. 나는 Views/Web.config
v4.0으로 다시 설정 했고 모든 것이 작동했습니다.
뷰가 프로젝트간에 공유 뷰를 재사용하는 데 유용한 클래스 라이브러리 어셈블리에있는 경우 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 을 사용하고 있는지 확인 하십시오.
이 문제도 만났습니다. 제 상황은 조금 달랐습니다.
내보기 폴더 중 하나가 실수로 내 프로젝트의 루트 디렉토리로 이동되었습니다. 이것은 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 사이에서만 발생해야합니다. 이후 버전에서이 문제가 발생하면 원인이 아닐 수 있습니다. 업그레이드.
이 문제를 해결하는 데 오랜 시간이 걸렸지 만 마침내 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}로 바꿉니다.
그게 다입니다.
<add key="webpages:Version" value="2.0.0.0" />
추진 요인 이라고 생각하지만 다른 설정은 필요하지 않습니다.
3.0.0.0
하지만 예 이것은 매우 중요합니다!
끔찍한 실수이지만 :
View at Remote 에 Web.config 파일 이 있는지 확인하십시오 . Ftp 프로그램의 필터로 업로드하지 않았을 수 있습니다.
Areas / MyArea / Views / web.config에서 web.config가 누락되었습니다. 일단 추가되면 잘 작동했습니다. 이것은 MVC 5 및 .NET4.5에서 발생했습니다.
이 같은 문제가 발생했지만 제 경우에는 변경된 유일한 사항은 Visual Studio 2012를 제거하고 Visual Studio 2013을 설치 한 것입니다. 솔루션을 열었지만 계속 같은 문제가 발생했습니다. The name 'model' does not exist in current context
모든 Razor 뷰에서 오류가 발생했습니다.
동료가 VS2013에 대한 업데이트 확인을 제안했습니다. VS2013 업데이트 1을 설치 한 후이 오류가 더 이상 발생하지 않습니다.
너겟을 다시 설치하면 해결되었습니다.
PM> Install-Package Microsoft.AspNet.Razor-버전 3.2.3
저에게는 이것이 문제였습니다. 이 전체 블록이 섹션에서 누락되었습니다.
<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>