MVC 4 응용 프로그램에서 중요한 리팩터링을 한 후 Razor는 뷰를 디버깅하는 동안이 오류를 표시합니다.
현재 컨텍스트에 'model'이라는 이름이 없습니다.
이것은 잘못된 코드 행입니다.
@model ICollection<DataSourceByActive>
사용법 @model이 올바른 것을 알고 있습니다.
왜 이런 일이 발생합니까? 어떻게 고칠 수 있습니까?
MVC 4 응용 프로그램에서 중요한 리팩터링을 한 후 Razor는 뷰를 디버깅하는 동안이 오류를 표시합니다.
현재 컨텍스트에 'model'이라는 이름이 없습니다.
이것은 잘못된 코드 행입니다.
@model ICollection<DataSourceByActive>
사용법 @model이 올바른 것을 알고 있습니다.
왜 이런 일이 발생합니까? 어떻게 고칠 수 있습니까?
답변:
Views 폴더에있는 web.config 파일을 엉망으로 생각합니다.
동일한 .NET 프레임 워크를 대상으로하는 새 프로젝트를 작성하고 Views / web.config 파일을 현재 프로젝트의 파일 위에 복사하십시오. 문제가 해결됩니다.
또한 Dudeman3000이 언급했듯이 MVC 프로젝트에 영역이 있으면 Views\web.config파일도 있습니다.
This will fix your problem.그렇지 않았다.
확인 당신에게 두 사이트에 다음이 Web.config및 뷰 디렉토리 Web.config에 appSettings섹션
<add key="webpages:Version" value="2.0.0.0" />
MVC5의 경우 :
<add key="webpages:Version" value="3.0.0.0" />
(그리고 그것은 주 Web.config파일 에만 존재 합니다.)
3.0.0.0합니다. ( 주 Web.config 파일 에만 존재 합니다.)
2.0.0.0대신 버전을 대상으로 한다는 것입니다 3.0.0.0. 변경하면 문제가 해결되었습니다. 감사합니다!
여기 내가 한 일이 있습니다.
.suo 파일은 .svn 솔루션 파일과 동일한 폴더에 숨겨진 파일이며 Visual Studio 사용자 옵션을 포함합니다.
web.config용 파일 ASP.NET Core이 없으므로이 기능이 유용합니다 (명확성을 향상시키기 위해 확장 기능을 추가했습니다).
.vs폴더를 삭제하면 도움이됩니다.
나는 같은 문제가 있었고 Gupta의 답변에서 권장하는대로 새 프로젝트를 만들고 web.config 파일을 복사했지만 문제가 해결되지 않았습니다. Alex와 Liam의 답변을 확인 했는데이 줄은 새 web.config에서 복사해야한다고 생각했지만 새 프로젝트 자체에는이 줄 (MVC5)이없는 것처럼 보입니다.
<add key="webpages:Version" value="3.0.0.0" />
views / web.config 파일에 줄을 추가하면 문제가 해결되었습니다.
보기 폴더의 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" />
System.Web.Mvc당신이 필요로하는 주요 버전을 확인하기 위해 어셈블리 참조.
필자의 경우 최근에 MVC 4에서 MVC 5로 업데이트되어 web.config가 상당히 나빠졌습니다. 이 기사는 엄청나게 도움이되었습니다.
결론은 web.config 및 Views / web.config에서 모든 버전 번호 참조가 MVC 5와 관련된 올바른 업그레이드 버전을 참조하고 있는지 확인해야한다는 것입니다.
@model에서 @Model로 변경하면 나를 위해 일했습니다.
@model은 뷰 모델 객체 유형을 나타냅니다. @Model은 뷰 모델 객체를 나타냅니다.
해결책을 찾았습니다. 면도기 버전 또는 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 또한 변화해야합니다.
필자의 경우 다음 코드가 유용하다는 것을 알았습니다. 코드 아래에 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>
코드가 업데이트되면 솔루션을 정리하고 다시 작성하십시오. 나는 이것이 당신을 도울 수 있기를 바랍니다!
기존의 답변 중 아무도 나를 위해 일하지,하지만 난 무엇을 발견 했다 비교가 나를 위해 일을 .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>
나는 그들이 어떻게 거기에 도착했는지 또는 그들이 무엇을하는지 모르겠다. 아마도 나보다 똑똑한 사람이 그 정보를 추가 할 수있을 것이다. 마침내이 문제를 해결하게되어 기뻤습니다.
어떤 이유로 내 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>
필자의 경우 문제는 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 % 사용).
Azure App Service에 배포 할 때도 같은 문제가있었습니다.
제 경우에는 ~ / Views / Web.config가 프로젝트에 포함되지 않았기 때문입니다.
IIS Express에서 작동했지만 Azure에 배포 할 때 동일한 오류가 발생했습니다. .csproj 파일에 포함되지 않아 배포되지 않았습니다.
해결책은 ~ / Views / Web.config가 프로젝트에 포함되도록하는 것입니다.
솔루션 탐색기로 이동하여 "모든 파일 표시"아이콘을 클릭 한 다음보기를 열면 아래에 포함되지 않은 Web.config 파일이 표시 될 수 있습니다.
그것을 추가하고 다시 게시하면 밥이 삼촌입니다.
이 문제를 해결하기 위해 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>
이 문제가 발생했을 때 내 "Views"폴더 외부에있는 뷰를 추가하려고했습니다 (코드를 다르게 구성하기 위해 추측합니다). 뷰 내에서 뷰를 작성하면 (일반적으로) 해결되었습니다.
내 경우에는 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>
}
코드에서라는 변수를 코드에서 사용할 수 있습니다 model.