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
다른 프로젝트의 파일을. .csproj
XML 파일 을 다음과 같이 수동으로 편집 하면 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
.