"현재 모델에는 '모델'이라는 이름이 없습니다."


200

MVC 4 응용 프로그램에서 중요한 리팩터링을 한 후 Razor는 뷰를 디버깅하는 동안이 오류를 표시합니다.

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

이것은 잘못된 코드 행입니다.

@model ICollection<DataSourceByActive>

사용법 @model이 올바른 것을 알고 있습니다.

왜 이런 일이 발생합니까? 어떻게 고칠 수 있습니까?


열쇠는 "현재 상황에서"입니다. 어딘가에 괄호가 열리지 않거나 닫히지 않았습니다 ... 그래서 당신의 진술은 당신이 생각하는 맥락에 있지 않습니다.
Floris

1
수행하려는 작업의 샘플 마크 업과 함께 컨트롤러 코드를 추가 할 수 있습니까?
scniro

답변:


244

Views 폴더에있는 web.config 파일을 엉망으로 생각합니다.

동일한 .NET 프레임 워크를 대상으로하는 새 프로젝트를 작성하고 Views / web.config 파일을 현재 프로젝트의 파일 위에 복사하십시오. 문제가 해결됩니다.

또한 Dudeman3000이 언급했듯이 MVC 프로젝트에 영역이 있으면 Views\web.config파일도 있습니다.


20
MVC 프로젝트에 Areas가 있으면 Views \ web.config 파일도 있습니다!
Dudeman30008

6
이상하게도 views 디렉토리의 web.config는 괜찮 았지만 프로젝트의 web.config에는 웹 페이지 버전이 2.0.0이었습니다. 내가 3.0.0을 만들 때 잘못된 오류 감지가 사라졌습니다.
윌리엄 T. 청둥 오리

43
This will fix your problem.그렇지 않았다.
Timwi

2
@AnirudhaGupta 문제의 하나.
Timwi

1
유효한 web.config 파일을 Views 폴더에 복사했지만 프로젝트에 포함되지 않았습니다.
Wildcat Matt

104

확인 당신에게 두 사이트에 다음이 Web.config및 뷰 디렉토리 Web.configappSettings섹션

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

MVC5의 경우 :

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

(그리고 그것은 주 Web.config파일 에만 존재 합니다.)


14
감사! MVC5의 경우 버전 번호는이어야 3.0.0.0합니다. ( Web.config 파일 에만 존재 합니다.)
xec

이것은 버전 번호를 변경하기 위해 모든 곳에서 시도했을 때 말할 수있는 정답입니다. 그러나 결국 면도기 인텔리전스가 작동하지 못하게하는 유일한 방법이었습니다.
Shivam Chopra

6
이것은 나를 위해 일했습니다. 모든 것이 작동하려면이 변경 후 Visual Studio를 다시 시작해야했습니다.
Ravvy

1
MVC 5 에서이 문제가 발생했습니다. 문제는 키가 있지만 2.0.0.0대신 버전을 대상으로 한다는 것입니다 3.0.0.0. 변경하면 문제가 해결되었습니다. 감사합니다!
vaindil

나는 이것을 사용했고 효과가 있었지만보기 web.config에만 추가했습니다. VS를 다시 시작한 직후 Intellisense가 등장했습니다.
Matt

48

여기 내가 한 일이 있습니다.

  1. Visual Studio 닫기
  2. SUO 파일 삭제
  3. Visual Studio를 다시 시작하십시오.

.suo 파일은 .svn 솔루션 파일과 동일한 폴더에 숨겨진 파일이며 Visual Studio 사용자 옵션을 포함합니다.


예, 응용 프로그램 web.config용 파일 ASP.NET Core이 없으므로이 기능이 유용합니다 (명확성을 향상시키기 위해 확장 기능을 추가했습니다).
VMAtm

2
SUO 파일을 삭제할 필요조차 없었습니다. 방금 Visual Studio를 닫았다가 열었습니다.
Jim S

Visual Studio 2019 : suo 파일이 없으므로 .vs폴더를 삭제하면 도움이됩니다.
Štěpán Havránek 19

고마워 .. 이것은 나를 위해 그것을했다. .net 코어 2.0 mvc 앱
roblem

2
Visual Studio 2019는 여기에서 닫았다가 다시 열었습니다. 감사.
JordanGW

26

나는 같은 문제가 있었고 Gupta의 답변에서 권장하는대로 새 프로젝트를 만들고 web.config 파일을 복사했지만 문제가 해결되지 않았습니다. Alex와 Liam의 답변을 확인 했는데이 줄은 새 web.config에서 복사해야한다고 생각했지만 새 프로젝트 자체에는이 줄 (MVC5)이없는 것처럼 보입니다.

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

views / web.config 파일에 줄을 추가하면 문제가 해결되었습니다.


이는 asp.net 버전 4.0.0에서 4.5.1로 업그레이드 한 경우 발생합니다. 필자의 경우 기본 web.config에 webpages : Version = 2.0.0.0이 표시되었지만 3.0.0.0이어야합니다. 이 값을 업데이트하면 문제가 해결되었습니다.
Veysel Ozdemir

15

보기 폴더의 web.config에서 다음 줄을 변경하면 동일한 오류가 해결되었습니다.

에서

 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

1
이것은 또한 나를 위해 일했습니다. C # 6을 지원하도록 면도기를 업그레이드했으며 MVC도 업데이트해야합니다. 귀하의 확인 System.Web.Mvc당신이 필요로하는 주요 버전을 확인하기 위해 어셈블리 참조.
James Wilkins

나는 같은 문제가 있었다. x.0.0.0에 Web.config의 모든 MVC, 면도기 등 어셈블리를 고정하는 것은 다시 나를 위해 일하는 일이있어
mamashare

@JamesWilkins Nice는 나를 위해 일했습니다. 한 가지만, 그 후 프로젝트 .suo 파일을 삭제하고 VS를 다시 시작하십시오.

잘 잡아! .net framework 4.0에서 4.6으로 업그레이드하고 분명히 잘못된 어셈블리 버전을 가리키는 후에이 문제에 직면했습니다.
prashant

10

필자의 경우 최근에 MVC 4에서 MVC 5로 업데이트되어 web.config가 상당히 나빠졌습니다. 이 기사는 엄청나게 도움이되었습니다.

http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web- API-2

결론은 web.config 및 Views / web.config에서 모든 버전 번호 참조가 MVC 5와 관련된 올바른 업그레이드 버전을 참조하고 있는지 확인해야한다는 것입니다.


1
MVC 4에서 MVC 5로 업그레이드 한 경우 확인해야합니다. 버전 문제를 정확하게 지적하고 문제를 해결했으며 모든 것을 깨뜨릴 위험이 거의 없습니다.
R. Schreurs

10

@model에서 @Model로 변경하면 나를 위해 일했습니다.

@model은 뷰 모델 객체 유형을 나타냅니다. @Model은 뷰 모델 객체를 나타냅니다.


1
나는 이것을 잊어 버리기를 바란다! 상기시켜 주셔서 감사합니다!
마이크

1
이 문제를 찾아보아야하는 횟수는 실망 스럽습니다 .. 그러나 이것이 간단한 해결책이라는 것이 기쁩니다!
Brendan Sluke

7

해결책을 찾았습니다. 면도기 버전 또는 mvc 4를 5로 업데이트하려면 일부 줄을 변경하십시오.

Views / web.config의 이전 코드

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

로 교체

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

sectionGroup 또한 변화해야합니다.


6

필자의 경우 다음 코드가 유용하다는 것을 알았습니다. 코드 아래에 Views 폴더 아래의 Web.config 파일에 배치하십시오.

<configSections>

  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
   <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>

</configSections>

코드가 업데이트되면 솔루션을 정리하고 다시 작성하십시오. 나는 이것이 당신을 도울 수 있기를 바랍니다!


5

기존의 답변 중 아무도 나를 위해 일하지,하지만 난 무엇을 발견 했다 비교가 나를 위해 일을 .csproj다른 프로젝트의 파일을. .csprojXML 파일 을 다음과 같이 수동으로 편집 하면 Razor-intellisense 문제가 해결되었습니다. 아마도 다른 모든 답변을 시도하지 않은 사람이 도움이되지 않을 수도 있습니다. 핵심은 <Private>False</Private>에서의 인스턴스를 제거하는 것입니다 <Reference>.

<ItemGroup>
  <Reference Include="Foo">
    <HintPath>path\to\Foo</HintPath>
    <!-- <Private>False</Private> -->
  </Reference>
  <Reference Include="Bar">
    <HintPath>path\to\Bar</HintPath>
    <!-- <Private>True</Private> -->
  </Reference>
</ItemGroup>

나는 그들이 어떻게 거기에 도착했는지 또는 그들이 무엇을하는지 모르겠다. 아마도 나보다 똑똑한 사람이 그 정보를 추가 할 수있을 것이다. 마침내이 문제를 해결하게되어 기뻤습니다.


제안 주셔서 감사합니다, 이것은 또한 어떤 이유로 든 나를 위해 일했다
Scherling

나도 일했다.
Alex

그것은 내 경우에 효과가 있었던 유일한 옵션이었습니다. vs2010 프로젝트를 2019로 전환하고 매력처럼 일했습니다. csproj를 저장 한 후 원본 파일과 같은 태그의 주석을 해제하려고 시도했지만 여전히 작동 중입니다.
jefissu

3

어떤 이유로 내 web.config 의 oldVersion 속성 은 0.0.0.0 이었습니다.

<runtime>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
</runtime>

1.0.0.0 으로 변경하는 것이 해결책이었습니다.

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
  </dependentAssembly>

3

Visual Studio 2019에서 MVC4 프로젝트를 사용하고 있었으며 VS 2019는 기본적으로 MVC 4를 지원하지 않습니다. 이것을 설치해야합니다.

단계 :

  • Visual Studio 설치 관리자 열기 (Windows에서 Visual Studio Installer 검색)
  • 개별 구성 요소를 클릭하십시오
  • 검색 창에 "mvc"라고 쓰십시오.
  • mvc4-box 확인
  • 오른쪽 하단의 "수정"을 클릭하십시오

참고 : Visual Studio를 닫아야합니다.

여기에 이미지 설명을 입력하십시오


2

필자의 경우 문제는 MVC 4에서 MVC 5로 프로젝트를 업그레이드 한 후 Views / web.config의 버전 변경이 누락되었다는 것입니다.

    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">            

여전히 이전 2.0.0.0 버전이있었습니다. 버전을 3.0.0.0으로 변경하면 모든 것이 올바르게 작동하기 시작했습니다.

또한이 문제로 인해 Visual Studio 2015 Community Edition은 .cshtml 파일을 열 때마다 CPU를 유휴 상태로 시작합니다 (유휴 상태에서 30-40 % 사용).


2

Azure App Service에 배포 할 때도 같은 문제가있었습니다.

제 경우에는 ~ / Views / Web.config가 프로젝트에 포함되지 않았기 때문입니다.

IIS Express에서 작동했지만 Azure에 배포 할 때 동일한 오류가 발생했습니다. .csproj 파일에 포함되지 않아 배포되지 않았습니다.

해결책은 ~ / Views / Web.config가 프로젝트에 포함되도록하는 것입니다.

솔루션 탐색기로 이동하여 "모든 파일 표시"아이콘을 클릭 한 다음보기를 열면 아래에 포함되지 않은 Web.config 파일이 표시 될 수 있습니다.

그것을 추가하고 다시 게시하면 밥이 삼촌입니다.


1

나에게 문제는 최근에 가져온 라이브러리 중 하나에서 충돌하는 .NET 버전이었습니다. 내가 가져온 라이브러리는 4.5.2 용으로 컴파일되었고 ASP.NET MVC 사이트는 대상 4.5로 가져 왔습니다. 4.5에 대해 lib를 다시 컴파일하면 웹 사이트가 완료됩니다.

또한 컴파일 오류는 없었지만 문제는 "경고"로보고되었습니다. 따라서 모든 경고가 있는지 확인하십시오.


1

이 문제를 해결하기 위해 NuGet 및 Package Manager Console을 사용하여 최신 MVC 버전으로 업그레이드했는지 확인했습니다.

설치 패키지 Microsoft.AspNet.Mvc-버전 5.2.4

그런 다음 최신 면도기 버전으로 업그레이드

설치 패키지 Microsoft.AspNet.Razor-버전 3.2.4

그런 다음 모든 web.config 파일을 변경 사항을 반영하여 변경했습니다. 아래에서 볼 수 있듯이 :

기본 web.config 파일에서 webpages : version이 올바른지 확인하십시오. 여기에서 찾을 수 있습니다 (다른 키는 무시).

<configuration>
 <appSettings>
   <add key="webpages:Version" value="3.0.0.0"/>
   <add key="ClientValidationEnabled" value="true"/>
   <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
 </appSettings>
</configuration>

그런 다음 어셈블리에 나열된 다른 버전을 찾고 프로젝트 참조에 나열된 라이브러리 버전과 어셈블리 버전을 확인하십시오! 이 모든 것이 필요하지 않을 수 있습니다.

<system.web>
    <compilation debug="true" targetFramework="4.6">
        <assemblies>
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.Helpers, Version=3.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=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </assemblies>
    </compilation>
</system.web>

런타임 어셈블리 바인딩에 "newversion"도 표시되어야합니다. NewVersion 5.2.4.0이 어디에 있는지 확인하십시오. 그러나 다른 모든 버전도 확인하십시오.

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

Views Web.Config 섹션에서 Razor가 올바른 버전인지 확인하십시오.

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
<configuration>

마지막으로 Views Web.Config의 Pages 섹션이 있습니다.

    <pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>

1

나처럼 프로젝트를 변경하지 않고이 문제를 해결하려면 View Folder에있는 web.config를 변경해야합니다. 빈 줄을 입력하거나 제거하여 새 줄을 작성하십시오. 그런 다음 web.config를 저장하고 다시 빌드하십시오. 이 솔루션으로 내 문제가 해결되었습니다.


0

이 문제가 발생했을 때 내 "Views"폴더 외부에있는 뷰를 추가하려고했습니다 (코드를 다르게 구성하기 위해 추측합니다). 뷰 내에서 뷰를 작성하면 (일반적으로) 해결되었습니다.


0

내 경우에는 foreach의 시작 부분에서 @이 누락되었습니다.

    @foreach (var item in Model)
    {
        <tr class="clickable-row">
            <td class="clickable-field">
                @Html.DisplayFor(modelItem => item.Label)
            </td>
            <td class="clickable-field hidden-xs">
                @Html.DisplayFor(modelItem => item.Value)
            </td>
        </tr>
    }

이건 중요하다; 왜 다운 보트인지 몰라요.
FlyingV

1
원래 질문과 관련이 없기 때문입니다.
Ryan

0

필자의 경우 실수로 Views 폴더에서 web.config 파일을 제거했습니다. 다시 추가했는데 괜찮습니다.


-3

변수를 인쇄 할 때 @Model대신 대신 사용하여 문제를 해결했습니다 model.


-8

코드에서라는 변수를 코드에서 사용할 수 있습니다 model.

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