MVC 4 @Scripts“존재하지 않습니다”


201

방금 ASP.NET MVC 4 프로젝트를 만들고 Visual Studio 2012 RC를 사용하여 컨트롤러 및 면도기보기 Index및 Create작업 을 만들었습니다 .

응용 프로그램을 실행하고 Create보기를 탐색 할 때 다음 오류가 표시되었습니다.

컴파일러 오류 메시지 : CS0103 : 현재 컨텍스트에 'Scripts'라는 이름이 없습니다.

문제는 View의 맨 아래에 자동으로 추가 된 다음 코드입니다.

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

왜 스크립트가 존재하지 않습니까?

Assembly System.Web.Mvc.dll, v4.0.0.0의 기본 웹 페이지 클래스를 보았습니다.

다음과 같은 도우미 속성을 사용할 수 있습니다.

  • 아약스
  • HTML
  • URL

그러나 스크립트라는 이름은 없습니다.

어떤 아이디어?

편집하다:

내 Web.config 파일은 다음과 같습니다 (Visual Studio에서 만든 파일에서 변경되지 않음).

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.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>

편집 # 2 :

사람들은 @Scripts도우미 사용에 대해 블로깅하고 있습니다 .

그러나 새로운 Windows 8 설치에 Visual Studio 2012 RC를 방금 설치 @Scripts했지만 Visual Studio가 생성 된 View에 추가하더라도 여전히 사용할 수 없습니다 !

솔루션은 다음과 같습니다.

결국 업데이트가 문제를 해결하는 것처럼 보였으므로 닫는 방법을 잘 모르겠습니다. 새 프로젝트를 사용하여 새로 설치를 수행했는지 다시 확인했습니다. 그러나 내가 만든 동일한 실패한 프로젝트는 다양한 업데이트와 수동 개입 없이도 잘 작동합니다. 모든 생각에 감사하지만 당시에는 분명히 문제가있었습니다.)


이미 Web.config에서 추가를 시도해 보셨습니까? <system.web.webPages.razor> <pages pageBaseType=""> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> etc... </pages>
— Zach dev

Web.config에서 섹션을 추가했지만 해당 파일에서 아무것도 변경하지 않았습니다.
— FantasticJamieBurns

6
앱 루트 web.config가 아닌 "My Views \ Web.config"파일을 의미합니다. 어쨌든 <add namespace = "System.Web.Optimization"/>이 (가) 올바르지 않고 누락되었습니다. RC 이전에 VS12 Beta를 설치 했습니까? 어떤 win8 버전입니까?
— RickAndMSFT 2016 년

@RickAndMSFT VS 2012 RC ISO의 설치와 함께 Release Preview ISO에서 Win8을 새로 설치하여 버전 충돌이 아닌지 확인했습니다.
— FantasticJamieBurns

@RickAndMSFT My Views \ Web.config는 영역의 모든 뷰를 놓치게됩니다
— Maslow

답변:


269

여기서 핵심은 추가하는 것입니다

 <add namespace="System.Web.Optimization" /> 

web.config 파일 모두에. 내 시나리오는 프로젝트와 기본 / 루트 web.config 모두에서 System.Web.Optimization 참조를 가지고 있었지만 @Scripts는 여전히 제대로 작동하지 않았습니다. 네임 스페이스 참조를 Views web.config 파일에 추가해야 작동합니다.

최신 정보:

MVC 4 System.Web.Optimization의 출시 이후 더 이상 사용되지 않습니다. 빈 솔루션으로 시작하는 경우 다음 nuget 패키지를 설치해야합니다.

Install-Package Microsoft.AspNet.Web.Optimization

web.config 파일에서 여전히 System.Web.Optimization을 참조해야합니다. 자세한 정보는 다음 주제를 참조하십시오.

MVC-3-converted-to-4 앱에 대한 System.Web.Optimization에 대한 참조를 추가하는 방법

많은 사람들이 지적했듯이 위의 단계 후에 VS를 다시 시작 해야이 작업을 수행 할 수 있습니다.


8
Install-Package Microsoft.AspNet.Web.Optimization빈 ASP.NET MVC4 템플릿은 기본적으로 포함되어 있지 않으므로 빈 ASP.NET MVC4 템플릿에서 실행해야 할 수도 있습니다 .
— 포트만

@Portman 예 빈 MVC 프로젝트 템플릿으로 시작한 경우 Microsoft.AspNet.Web.Optimization 패키지를 설치해야합니다.
— Marko

2
web.config의 Views 폴더에 추가하면됩니다.
— user1534664

9
이것이 실제로 해결책입니다. 그러나 이것을 인식하려면 Visual Studio를 다시 시작해야했습니다.
— Jason Eades

4
이것을 Views / Web.config에 추가 한 다음 Visual Studio를 다시 시작해야했습니다.
— Caverman

48

@Styles과 @Scripts에서 제공하는 2 개의 새로운 도우미입니다 System.Web.Optimization라이브러리. 이름에서 알 수 있듯이 CSS와 JavaScript 파일 또는 리소스를 각각 묶고 축소합니다.

지시문 또는 다음을 통해 네임 스페이스 System.Web.Optimization를 포함 시키십시오.@usingweb.config

http://ofps.oreilly.com/titles/9781449320317/ch_ClientOptimization.html#BundlingAndMinification

최신 정보

Microsoft는 번들링 / 축소를라는 별도의 패키지로 옮겼습니다 Microsoft.AspNet.Web.Optimization. nuget 에서 어셈블리를 다운로드 할 수 있습니다 .

이 게시물 이 도움이 될 것입니다.


2
System.Web.Optimization을 추가하면 "CS0234 : 'System.Web'네임 스페이스에 'Optimization'형식 또는 네임 스페이스 이름이 없습니다. 추가 할 System.Web.Optimization이라는 참조는 없습니다.
— FantasticJamieBurns

1
응답 한 이후 System.Web.Optimization 네임 스페이스가 더 이상 사용되지 않습니다. 대신 Microsoft.AspNet.Web.Optimization을 사용해보십시오. 자세한 내용은이 질문을 참조하십시오 : stackoverflow.com/questions/9475893/…
— Jeremy Jarrell

3
설명 : System.Web.Optimization네임 스페이스는 더 이상 사용되지 않습니다 System.Web.Optimization.dll.
— Despertar 2016 년

감사! 다른 영역의 레이아웃에 문제가있을 때 나를 위해 노력하고 있습니다.
— 개발자

48

위에서 다른 작은 단계가 누락되어 다른 게시물에서 발견했습니다. 추가 후

<add namespace="System.Web.Optimization" />

당신에 ~/Views/web.config네임 스페이스, 닫고 다시 Visual Studio를 엽니 다. 이것이 내가이 일을하기 위해해야했던 일입니다.


2
여기서도 VS를 다시 시작했지만 그 전에 여전히 오류가 표시되었습니다 ...?
— Andreas

VS를 닫을 필요는 없었지만 필자는 사용중인 .cshtml 뷰를 닫았다가 다시 열어야했습니다.
— joalcego

29

영역을 사용하고 있으며이 문제와 관련하여 방금 네임 스페이스를 루트 web.config에서 영역 웹으로 복사했습니다. 구성 및 이제 작동합니다!

    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />        
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />

15

나는 같은 문제가 있었고 WinMerge를 사용하여 이것을 추적하는 데 도움을주었습니다. 그러나 더 자세히 조사한 결과 Rick이 블로그에 대한 완벽한 블로그 게시물 을 가지고 있음을 발견 했습니다.

요약:

  • 더하다 <add namespace="System.Web.Optimization"/>두 web.config 파일 모두에
  • 운영 Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization
  • 번들링 코드 업데이트
  • 레이아웃 파일 업데이트
  • 마지막 단계는 10 개의 다른 라이브러리를 업데이트하는 것입니다. 나는하지 않고 잘 작동했습니다. 따라서이 중 하나를 이미 업데이트하지 않은 한이를 미루는 것처럼 보입니다. :)

이 Dan에게 대답 해 주셔서 감사합니다! (그리고 내 블로그를 지적). 그의 질문은 그가 RC로 시작했다는 것을 암시하지만 당신이 옳다고 생각합니다. 그는 RC 프로젝트 컨트롤러를 베타 프로젝트에 추가했습니다.
— RickAndMSFT 2016 년

몇 주가 지났고, 나 자신을 두 번째로 추측하게 만들었습니다. 나는 확실히 VS 2012를 내 태블릿에 올려 놓았는데 Metro Apps 외에는 아무것도 없었지만 실패했습니다. VM에서 다시 시도하겠습니다.
— FantasticJamieBurns

이것은 나를 위해 일했습니다. 해야 할 일에 대한 정확한 지침은 링크 된 기사를 읽으십시오.
— Justin

11

나는 같은 문제가 있었다.

내가 사용하고 있던 System.Web.Optimization 버전은 MVC4 RC 용으로 구 버전입니다.

VS 2010에서 패키지 관리자를 사용하여 패키지를 업데이트했습니다.

이 MSDN 블로그에서 에서 Andy 씨는 MVC 4 베타 프로젝트를 MVC 4 RC로 업데이트하는 방법에 대해 설명합니다. 내 패키지를 업데이트하면 스크립트 (특히 웹 최적화 패키지)가 해결됩니다.

최신 System.Web.Optimization 패키지를 설치하려면 패키지 관리자 콘솔 (도구-> 라이브러리 패키지 관리자-> 패키지 관리자 콘솔)을 사용하고 아래 명령을 실행하십시오.

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization

패키지에 포함 된 System.Web.Optimization 파일을 참조하십시오.

다른 패키지를 업데이트하려면 : 도구 메뉴-> 라이브러리 패키지 관리자-> 솔루션 용 NuGet 패키지 관리.


5

새로운 MVC 4 RC 인터넷 응용 프로그램을 만들고 실행하십시오. 동일한 코드를 사용하는 로그인으로 이동

 @section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

Login.cshtml이 작동하도록하는 것은 Views \ Web.config 파일 (앱 루트 버전이 아님)에 포함되어 있습니다.

<namespaces>

    <add namespace="System.Web.Optimization"/>

  </namespaces>

작성보기가 작동하지 않고 로그인이 왜 필요한가요?


로그인을 사용하지 않았습니다. 당시에는 제대로 작동하지 않았을 수 있습니다.
— FantasticJamieBurns

5

다음과 같이 면도기보기 위에 System.Web.Optimization을 가져옵니다.

@using System.Web.Optimization

3

그러나 명령을 실행하는 동안이 문제가 발생했습니다.

Install-Package -IncludePrerelease Microsoft.AspNet.Web.Optimization 

나는 비밀스러운 메시지를 받았다 (커피를 마시기 전에 큰 돈을 좋아해야 함)

Install-Package :이 플랫폼에서는 지정된 암호화 알고리즘이 지원되지 않습니다.

나는 이것을 선택하지 않고 Windows XP SP3에서 실행하고 있으며 내가 찾은 것은 사용자 artsnob 가 ASP.NET 포럼 에 게시 한 지침을 따라야한다는 것입니다.

  • Nuget을 제거했다가 다시 설치하십시오. 이 작업을 수행 할 수 없으면 관리자로 로그인하십시오.
  • Tools => Extension Manager => "Nuget Package Manager"선택 => 제거로 이동하십시오.
  • "Nuget"=> Install을 검색하여 다시 설치하십시오.
  • 작동하지 않으면 이전 게시물에서 언급 한 1.7.x 버전 1.7.x 버전을 설치해보십시오. 이전 버전을 사용해야한다는 의미는 아닙니다. 제대로 작동하는 경우이 버그를보고하여 최신 버전의 패치).

일단 이것을 실행하면 Web.Optimization을 업데이트하기 위해 명령 줄을 실행할 수 있습니다.

이것이 누군가를 파는 것을 구하기를 바랍니다.


2

그냥 써

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}

@archil 교체해 주셔서 감사합니다. 좋은 임시 솔루션이 될 것입니다. 그러나 주요 질문은 "왜 스크립트가 존재하지 않습니까?"였습니다.
— FantasticJamieBurns

@Jamie 존재해야합니까? 내가 기억하는 한, 거기에는 Scipts 도우미가 없습니다. 타사 도우미를 사용하려고하십니까?
— archil

1
코드를 직접 추가하지 않았습니다. Visual Studio 2012 RC는 내 액션 만들기에 대한 뷰를 만들 때 추가했습니다. 나는 어떻게 든 내 MVC 4가 옳지 않다고 생각합니다. : 스콧 Hanselman은이 MVC 4 RC에 새로 추가 된 것으로 실패한 구문의 언급을 만들기 때문에이 곳을 일해야 hanselman.com/blog/...
— FantasticJamieBurns

1

베타에서 RC로 업그레이드했는데 '스크립트'에 문제가 있습니다. 웹 전체에서 서핑을하고 최종 솔루션은 N40JPJ가 말한 것 외에 다른 작업 방법입니다.

View \ Web.config에 다음을 복사하십시오.

  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.Optimization"/>
    <add namespace="System.Web.Helpers"/>
  </namespaces>

그리고 View \ Shared_Layout.cshtml 내부의 다음

@if (IsSectionDefined("scripts")) 
{
       @RenderSection("scripts", required: false)
}

도움이 되길 바랍니다.


1
조항을 if (IsSectionDefined())제공하지 않으면 사용할 필요가 없습니다 else. required: false이미 말하고 있다는 사실 때문에 해당 섹션을 정의 할 수 없으며이 경우 해당 섹션은 생략됩니다. 따라서 이것은 불필요한 추가 코드입니다.
— ErikE

0

'Scripts'폴더없이 'Empty'프로젝트 유형을 생성 한 것 같습니다. 내 충고-전체 '스크립트'폴더로 '기본'프로젝트 유형을 만듭니다.

모든 개발자와 관련하여.


0

컨트롤러의 면도기 생성 및 편집보기에서 코드를 제거 / 숨기기 만하면됩니다.

 @section Scripts {  

   @Scripts.Render("~/bundles/jqueryval")  
 }  

0
  1. :보기 페이지를 제거합니다.
  2. : 네임 스페이스 webconfig 추가 (보기 디렉토리)
  3. : 시험해보십시오!

행운을 빕니다...


0

루트와 뷰의 루트에 대한 web.config에 정의되어 있어도 같은 문제를 해결하기 위해 오랜 시간을 소비했습니다. 요소가 <system.web><pages><namespaces>아닌에 실수로 추가 한 것으로 나타났습니다 <system.web**.webPages.razor**><pages><namespaces>.

정말 놓치기 쉽다!


0

이 코드가있는 페이지에 들어가면 :

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

이 오류가 발생합니다 : 오류. 요청을 처리하는 동안 오류가 발생했습니다.

그리고이 예외는 내 로그에 기록됩니다.

System.Web.HttpException (0x80004005): The controller for path '/bundles/jqueryval' was not found or does not implement IController.
   em System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
...

이 페이지의 모든 팁을 시도했지만 그 중 어느 것도 나를 위해 해결되지 않았습니다. 따라서 패키지 폴더를 살펴본 결과 System.Web.Optmization.dll에 대한 두 가지 버전이 있음을 알았습니다.

  • Microsoft.AspNet.Web.Optimization.1.1.0 (v1.1.30515.0-68,7KB)
  • Microsoft.Web.Optimization.1.0.0-beta (v1.0.0.0-304KB)

내 프로젝트는 이전 베타 버전을 참조하고있었습니다. 최신 버전 (69KB)에 대한 참조 만 변경했으며 eveything이 정상적으로 작동했습니다.

누군가에게 도움이 될 것 같아요.


0

그것은 확실한 해결책이 있습니다. 나는 나중에 같은 문제가 있었다. 어셈블리 참조와 관련이 없거나 .... 복잡한 페이지 구조가있는 경우 MVC 부분보기의 계층 구조 호출에서 발생합니다. 따라서 각 페이지에서 개별 부품을 개별적으로 호출 / 렌더링하면 (마스터 페이지 또는 부분 일 수 있음) 다음 코드와 같이 페이지의 필요한 부분이 표시되지 않습니다.

@RenderSection("Scripts", required: false)

그러면 페이지가 관련 섹션을 찾아 렌더링하도록 강제하고 실패한 경우 오류 메시지가 표시됩니다.

따라서 마스터에서 모든 부분까지의 페이지 (프로그램 추적과 같은)를 Detect Dependencies 로 추적하는 것이 좋습니다 . 어쩌면 그것은 끔찍한 일이지만 여기서 다른 선택을 할 수는 없습니다.

내 경험에 따르면 프로그래밍의 일부 조건 적 상황으로 인해 올바른 오류가 표시되지 않아 문제가 발생하지 않습니다.


0

없는 프로젝트에 영역을 추가 한 후이 문제가 발생했습니다. 제거하기 위해 루트 Views 폴더가있는 web.config를 해당 영역의 Views 폴더에 복사하고 작업을 시작했습니다.


0

_Layout.cshtml에 코드 의이 부분을 추가하여 MvcMusicStore 에서이 문제를 해결합니다.

@if (IsSectionDefined("scripts")) 
{
       @RenderSection("scripts", required: false)
}

Edit.cshtml 에서이 코드를 제거하십시오.

 @section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

inshallah가 당신과 함께 일할 프로그램을 실행하십시오.


0

나를 위해 NuGet 패키지 관리자 콘솔에서 다음과 같이 문제를 해결했습니다.

update-package microsoft.aspnet.mvc -reinstall

0

최근 MVC4를 사용하기 시작했을 때 빈 템플릿으로 프로젝트를 만드는 동안 위의 문제에 직면했습니다. 문제를 해결하는 단계

  1. 이동 TOOLS-> Library Package Manager-> Packager Manager Console 아래 명령을 붙여 넣고 Enter 키를 누릅니다. Install-Package Microsoft.AspNet.Web.Optimization 참고 : 성공적인 설치를 기다립니다.
  2. 루트 수준의 Web.Config 파일로 이동하여 페이지 네임 스페이스 섹션에 아래 네임 스페이스를 추가하십시오. 더하다<namespace="System.Web.Optimization" />
  3. 보기 폴더에서 Web.Config로 이동하여 2 단계를 수행하십시오.
  4. 솔루션을 빌드하고 실행하십시오.

1 단계에서 언급 한 패키지는 System.Web과 같은 솔루션 참조에 몇 개의 시스템 라이브러리를 추가합니다. 최적화는 MVC4의 빈 템플릿에 대한 기본 참조가 아닙니다.

이게 도움이 되길 바란다. 감사합니다


0

프로젝트를 MVC3에서 MVC4로 업그레이드 할 때 매우 비슷한 오류가 발생했습니다.

컴파일러 오류 메시지 : CS0103 : 현재 컨텍스트에 [blah] 이름이 없습니다.

필자의 경우 여러 Web.Config에서 버전이 오래되었습니다.

  1. 프로젝트의 모든 Web.Config에서 System.Web.Mvc 버전 번호를 "3.0.0.0"에서 "4.0.0.0"으로 업데이트해야했습니다.
  2. 프로젝트의 모든 Web.Config에서 모든 System.Web.WebPages, System.Web.Helpers 및 System.Web.Razor 버전 번호를 "1.0.0.0"에서 "2.0.0.0"으로 업데이트해야했습니다.

전의:

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

...

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

각 Views 디렉토리에서 Web.Configs를 검토하십시오.

ASP.NET MVC 3 프로젝트를 ASP.NET MVC 4로 업그레이드에 대한 자세한 내용을 읽을 수 있습니다 .


0

web.config에 추가했는데 여전히 메시지가 표시되면 프로젝트를 닫았다가 다시 열어야합니다. 이제 프로젝트가 존재하고 @ Styles.Render ( "") 및 @ Scripts.Render ()가 제대로 작동합니다.


-1

이 시도:

@section Scripts 
{
    Scripts.Render("~/bundles/jqueryval")  // <- without ampersand at the begin
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.