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


201

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

응용 프로그램을 실행하고 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에서 실행하고 있으며 내가 찾은 것은 사용자 artsnobASP.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.