내 응용 프로그램에서 ViewBag를 사용하려고하는데 MVC 3의 최신 버전 인 모든 최신 dll이 있지만 여전히 오류가 발생합니다.
"현재 컨텍스트에 'ViewBag'이름이 없습니다."
MVC 3을 제거한 다음 다시 설치했지만 변경 사항이 없습니다.
또한 dll이 GAC에 표시되지 않는다고 생각합니다.
내 문제는 무엇일까요? 또는 dll을 GAC에 추가하는 방법은 무엇입니까?
내 응용 프로그램에서 ViewBag를 사용하려고하는데 MVC 3의 최신 버전 인 모든 최신 dll이 있지만 여전히 오류가 발생합니다.
"현재 컨텍스트에 'ViewBag'이름이 없습니다."
MVC 3을 제거한 다음 다시 설치했지만 변경 사항이 없습니다.
또한 dll이 GAC에 표시되지 않는다고 생각합니다.
내 문제는 무엇일까요? 또는 dll을 GAC에 추가하는 방법은 무엇입니까?
답변:
MVC 관련 Razor 구성을 web.config에 추가해야합니다. 여기 참조 : Razor HtmlHelper 확장 (또는 뷰에 대한 다른 네임 스페이스)을 찾을 수 없음
MVC 3 업그레이드 도구 를 사용하여 올바른 구성 값이 있는지 자동으로 확인하십시오.
~/Views
위치 외부) 해당 위치에도 복사하십시오 ~/Views/Web.config
.
나는 같은 문제를 겪고 있었다. ./Views/Web.config
ASP.NET MVC 템플릿을 사용하는 대신 빈 ASP.NET 응용 프로그램에서 프로젝트를 만들었 기 때문에 파일 이 누락되었습니다 .
ASP.NET MVC 5의 경우 바닐라 ./Views/Web.config
파일에는 다음이 포함됩니다.
<?xml version="1.0"?>
<!-- https://stackoverflow.com/a/19899269/178082 -->
<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>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<controls>
<add assembly="System.Web.Mvc, Version=5.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>
./Views/Web.config
이 콘텐츠가 포함 된 파일을 추가하면 이 문제가 해결되었습니다.
<add namespace="System.Web.Optimization"/>
Visual Studio 2015에서 MVC 5로 업그레이드 된 솔루션에서 동일한 문제가 발생했습니다.
뷰 폴더 (안 루트의 Web.config)에서 web.config 파일에서 나는 버전 번호가에 언급 된 업데이트 <configSections>
에서 2.0.0.0
에 3.0.0.0
.
<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>
다른 일을 시도한 후 VS 캐시였습니다. 다음 위치에있는 캐시 파일을 삭제하여 해결할 수 있습니다.
C : \ Users \ your.name.here \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache
내 프로젝트를 닫고 해당 경로의 파일을 삭제하고 프로젝트를 다시 열고 솔루션을 정리하고 다시 빌드했으며 문제가 해결되었습니다.
다음에 Visual Studio를 시작할 때 파일이 다시 생성됩니다.
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
나는 똑같은 문제가 있었고 crimbo가 나에게 올바른 단서를 주었다. 그것은 존재하지만 올바른 네임 스페이스를 포함하지 않는 ./Views/Web.config 파일로 인해 발생했습니다 ...
빈 MVC5 프로젝트를 만들고 ./Views/Web.config를 기존 프로젝트로 가져 왔고 모든 ViewBag 사용 아래의 빨간색 물결이 사라졌습니다!
Visual Studio 2013을 사용하고 MVC 3을 사용하려는 경우 Visual Studio 2013이 기본적으로 MVC 3을 지원하지 않고 (./Views/web.config를 변경하더라도) MVC 4 : https : // msdn 만 지원하기 때문에이 오류가 발생합니다 . .microsoft.com / en-us / library / hh266747.aspx
속성 대화 상자에서 응용 프로그램의 기본 네임 스페이스를 변경 한 후이 문제가 발생했습니다.
./Views/Web.Config에는 이전 네임 스페이스에 대한 참조가 포함되었습니다.
모든 접근 방식을 시도한 후 내가 가진 모든 것이 올바른 구성이기 때문에 아무도 나를 위해 일하지 않았습니다. 드디어
시스템의 "temp"및 "% temp %"에서 모든 파일을 삭제하면이 문제를 해결하는 데 도움이되었습니다.
실행 명령 (Windows + R)을 열고 문자열 위에 입력하고 모든 임시 파일을 삭제합니다.
이미 bin 및 obj 파일을 삭제하고 VS를 다시 시작하려고 시도했지만 운이 없었습니다.
나는 또한이 문제를 여러 번 겪었고 매번 해결하는 것이 고통 스럽습니다. 종종 web.config 파일에 참조 중 하나의 올바른 버전이 없기 때문입니다. 즉, Visual Studio에서 참조를 클릭하여 속성 탭에서 버전을 확인한 다음 web.config 파일의 버전과 일치시킵니다.
또 다른 방법은 (가능한 경우) .net 프레임 워크의 최신 버전으로 업그레이드 한 다음 bin / obj 파일을 삭제하고 Visual Studio를 다시 시작하는 것입니다. 나는 그것이 무언가를 바꾸고 있다고 가정 할 수 있습니다.
csproj 파일 간의 차이점을 빠르게 확인해도 실제로 큰 차이점이 표시되지는 않습니다. 그러나 표시 한 차이점은 (이전 줄을 표시하기 위해 추가 (제거)했습니다)
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> (remove)
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>(remove)
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
Web.Config 파일 (View의 파일이 아님)
<add key="webpages:Version" value="2.0.0.0" /> (remove)
<add key="webpages:Version" value="3.0.0.0"/>
또한 동일한 web.config 파일에 추가되었지만 수동으로 제거했습니다.
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
마지막으로 패키지 관리자 콘솔에서 update-package
웹 사이트를 로컬에서 실행하고 두 번째 단락에서 수정 한 컴파일 오류를 확인합니다 (참조 버전과 일치).
./Views/Web.Config 폴더에서 webpages : Version을 업데이트했지만이 설정은 루트의 web.config에도 있습니다. 둘 다 업데이트하거나 루트 web.config에서 제거
@Wilson Vallecilla가 이미 언급했듯이. 캐시를 삭제하려면 다음 단계를 수행하십시오.
파일을 찾으려면 아래 경로를 따르십시오.
C:\Users\your.name.here\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
4 개의 파일을 모두 삭제합니다.
- Microsoft.VisualStudio.Default.cache
- Microsoft.VisualStudio.Default.catalogs
- Microsoft.VisualStudio.Default.err
- Microsoft.VisualStudio.Default.external
내 프로젝트를 닫고 해당 경로의 파일을 삭제하고 프로젝트를 다시 열고 솔루션을 정리하고 다시 빌드했으며 문제가 해결되었습니다.
임시 ASP.NET 파일을 삭제하는 것도 도움이됩니다. C : \ Users \ your.name.here \ AppData \ Local \ Temp \ Temporary ASP.NET 파일.
이것은 나를 위해 작동합니다.
감사!
MVC5의 경우 처음부터 응용 프로그램을 빌드하는 경우. web.config 파일을 Views 폴더에 추가하고 여기에 다음 코드를 붙여 넣어야합니다.
<?xml version="1.0"?>
<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>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.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>
</configuration>
MVC 3의 경우 버전을 3.0.0.0으로 변경해야합니다.
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
변경 사항을 보려면 * .cshtml 페이지를 닫았다가 다시 열어야 할 수 있습니다.