현재 컨텍스트에 'ViewBag'이름이 없습니다.


89

내 응용 프로그램에서 ViewBag를 사용하려고하는데 MVC 3의 최신 버전 인 모든 최신 dll이 있지만 여전히 오류가 발생합니다.

"현재 컨텍스트에 'ViewBag'이름이 없습니다."

MVC 3을 제거한 다음 다시 설치했지만 변경 사항이 없습니다.

또한 dll이 GAC에 표시되지 않는다고 생각합니다.

내 문제는 무엇일까요? 또는 dll을 GAC에 추가하는 방법은 무엇입니까?


1
5.2.2.0의 경우 web.config는 5.2.2.0을 가리켜 야하지만 MVC 어셈블리의 경우 Views / web.config는 5.1.0.0을 가리켜 야합니다
Bart Calixto

답변:


39

MVC 관련 Razor 구성을 web.config에 추가해야합니다. 여기 참조 : Razor HtmlHelper 확장 (또는 뷰에 대한 다른 네임 스페이스)을 찾을 수 없음

MVC 3 업그레이드 도구 를 사용하여 올바른 구성 값이 있는지 자동으로 확인하십시오.


감사! 그 링크가 도움이되었습니다! 나는 이것이 모두 MVC 3 베타에 있던 사이트를 만든 결과라고 생각하며 최신 버전을 얻으면 웹 구성이 변경되지 않습니다. 감사!
2011

이 게시물과 관련 수정 사항을 업데이트했습니다. stevesmithblog.com/blog/…
ssmith

업그레이드 도구 (업데이트 된 답변 참조)를 사용하여 구성이 올바른지 확인할 수 있습니다.
2011

3
참고 : 추가보기 위치가있는 경우 (예 : 정상 ~/Views위치 외부) 해당 위치에도 복사하십시오 ~/Views/Web.config.
Dave Thieben 2013 년

83

나는 같은 문제를 겪고 있었다. ./Views/Web.configASP.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이 콘텐츠가 포함 된 파일을 추가하면 이 문제가 해결되었습니다.


3
마침내 해결책. /Views/Web.config 파일을 서버에 배포하지 않았고 누락 된 파일이 오류의 원인이었습니다.
Stack Man

2
돌아와서이 솔루션을 두 번째로 사용했습니다! :)
user230910

2
그것을 알아 내려고 하루를 낭비 한 후 이것은 나를 위해 해냈습니다. 감사. "./Views/Web.config에서 <namespaces> 태그에 추가해야하는 것은 다음과 같습니다. <add namespace="System.Web.Optimization"/>
dunwan

제 경우에는 어떤 이유로 요소가 루트 web.config에 없었지만 MVC5 레이아웃을 만들 때 'Views'에서 web.config에 추가되었습니다. 나는 루트의 Web.config의 요소를 마이그레이션하고 '추가'(?)의 web.config 삭제
JDPeckham

2
야, 신의 축복이 있기를. 나는 이것에 매우 짜증이났다.
Dragan B.

19

청소하고 재건하십시오. 제 경우에는 효과가있었습니다.


... 난 내 코드를 잘못 궁금 내 시간을 낭비 덕분에 믿을 수없는 일했다
Mr_Hmp

이 작품 ... 난 항상 이렇게하고 너무 많은 시간을 낭비하는 것을 잊지 것을 화나는 ... 필요는 없습니다
TCC

내 경우에는 내가 깨끗한 솔루션에서 폴더 패키지를 삭제해야했다
Nerdroid

9

Visual Studio 2015에서 MVC 5로 업그레이드 된 솔루션에서 동일한 문제가 발생했습니다.

뷰 폴더 (안 루트의 Web.config)에서 web.config 파일에서 나는 버전 번호가에 언급 된 업데이트 <configSections>에서 2.0.0.03.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>

2
대단히 감사합니다! 이 버전은 미친 짓입니다. MS 업그레이드를 돌릴 때마다 서로에게 모든 것이 있습니다. Ling to SQL은 Entity Framework로 대체되고 MVC는 1에서 6으로 계속 바뀌 었습니다.
JustJohn

감사합니다. VS2017의 문제를 해결했습니다.
QuickNull

VS 2019 mvc 5 앱이 수정되었습니다.
MrDywar

6

다른 일을 시도한 후 VS 캐시였습니다. 다음 위치에있는 캐시 파일을 삭제하여 해결할 수 있습니다.

C : \ Users \ your.name.here \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ComponentModelCache

내 프로젝트를 닫고 해당 경로의 파일을 삭제하고 프로젝트를 다시 열고 솔루션을 정리하고 다시 빌드했으며 문제가 해결되었습니다.

다음에 Visual Studio를 시작할 때 파일이 다시 생성됩니다.


이것은 v15 (VS 2017)에서도 저에게 효과적이었습니다. 나는 아마 이것을 할 생각은 없었을 것입니다 ... 큰 시간 절약에 감사드립니다, Wilson & Silver!
Paul Schroeder

범용 경로%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
피아트

3

나는 똑같은 문제가 있었고 crimbo가 나에게 올바른 단서를 주었다. 그것은 존재하지만 올바른 네임 스페이스를 포함하지 않는 ./Views/Web.config 파일로 인해 발생했습니다 ...

빈 MVC5 프로젝트를 만들고 ./Views/Web.config를 기존 프로젝트로 가져 왔고 모든 ViewBag 사용 아래의 빨간색 물결이 사라졌습니다!


Visual Studio 2013, MVC 상자가 선택된 빈 웹 프로젝트를 만들었습니다. 최소 MVC 네임 스페이스 참조로 모든 파일 구조를 생성합니다. 간단한 컨트롤러와보기를 추가했습니다. "The type or namespace name 'Ajax'does not exist in the namespace 'System.Web.Mvc'(A you missing an assembly reference)"컴파일 오류가 발생했습니다. 파일 편집기는 "현재 컨텍스트에 'ViewBag'이름이 없습니다."라는 경고도 표시합니다. 프로젝트 참조로 이동하여 System.Web.Mvc를 찾아 로컬 복사본을 true로 설정합니다. 빌드를 청소하고 다시 빌드하면 문제가 해결되었습니다.
Kagan Agun 2015 년


2

나는 한 ./Views/Web.Config파일을하지만,이 오류는 사이트를 게시 한 후 일어났다. 파일의 빌드 작업 속성 NoneContent. Content게시가 올바르게 작동 하도록 허용하도록 변경 합니다.


1

속성 대화 상자에서 응용 프로그램의 기본 네임 스페이스를 변경 한 후이 문제가 발생했습니다.

./Views/Web.Config에는 이전 네임 스페이스에 대한 참조가 포함되었습니다.


예, 완전히 잘못된 위치에 오류 메시지를 표시합니다. 모든 web.config 파일에서 참조되는 모든 네임 스페이스가 있는지 확인할 가치가 있습니다. Area의 web / config 파일에 오래된 네임 스페이스가있어 많은 문제가 발생했습니다.
user230910

1

제 경우에는 webpage : Version을 적절한 값으로 변경하면 문제가 해결되었습니다. 올바른 값은 (3.0.0.0 대신 2.0.0.0)입니다.

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

1

모든 접근 방식을 시도한 후 내가 가진 모든 것이 올바른 구성이기 때문에 아무도 나를 위해 일하지 않았습니다. 드디어

시스템의 "temp"및 "% temp %"에서 모든 파일을 삭제하면이 문제를 해결하는 데 도움이되었습니다.

실행 명령 (Windows + R)을 열고 문자열 위에 입력하고 모든 임시 파일을 삭제합니다.


감사합니다! 모든 것을 시도한 후에 이것은 나를 위해 일했습니다.
user390480

1

사용 가능한 모든 답변을 시도했지만 여전히 답변을 찾을 수없는 경우 문제가 해결 될 수 있습니다. 디버그, 릴리스 등과 같은 다른 솔루션 구성이있는 경우 프로젝트 출력 경로를 'bin'으로 설정하고 프로젝트를 컴파일하십시오. 컴파일 후 변경 사항을 되돌립니다.

프로젝트 출력 경로

VS는 bin 폴더에서 dll을 찾습니다.


1

이미 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=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

마지막으로 패키지 관리자 콘솔에서 update-package

웹 사이트를 로컬에서 실행하고 두 번째 단락에서 수정 한 컴파일 오류를 확인합니다 (참조 버전과 일치).


0

./Views/Web.Config 폴더에서 webpages : Version을 업데이트했지만이 설정은 루트의 web.config에도 있습니다. 둘 다 업데이트하거나 루트 web.config에서 제거


0

@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 파일.

이것은 나를 위해 작동합니다.

감사!


0

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 페이지를 닫았다가 다시 열어야 할 수 있습니다.

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