[asp.net-mvc-3] MVC3의 현재 컨텍스트에 ‘model’이라는 이름이 없습니다.

프로젝트에 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 을 사용하고 있는지 확인 하십시오.