다음 섹션이 정의되었지만 레이아웃 페이지 "~ / Views / Shared / _Layout.cshtml"에 대해 렌더링되지 않았습니다. "스크립트"


100

저는 ASP MVC를 처음 사용하고 Intro to ASP MVC 4 Beta 자습서 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet을 사용합니다. -mvc-4

대답을 찾을 수 없거나 프로그래밍 경험이 많지 않은 오류가 발생하여 튜토리얼을 진행하면서이 문제를 해결하기 시작해야 할 곳조차 모릅니다. 도움을 주시면 감사하겠습니다.

컨트롤러에서 모델 데이터 액세스 섹션에 있으며 튜토리얼의 일부로 영화를 만들려고 할 때이 오류가 발생합니다. "새로 만들기"링크를 클릭하면 다음 오류가 발생합니다.

다음 섹션이 정의되었지만 레이아웃 페이지> "~ / Views / Shared / _Layout.cshtml"에 대해 렌더링되지 않았습니다. "Scripts"

Visual Studio Express를 사용하는 대신 Visual Studio 2012 RC를 다운로드하도록 선택했습니다 (내 문제의 근본 원인인지 확실하지 않습니다.

이 질문에 답하려면 코드를 포함해야 할 수도 있지만 어떤 코드를 포함해야할지 모르겠습니다. 어떤 코드를 포함해야하는지 알려 주시면 제 질문에 추가해 드리겠습니다.

감사합니다,


해당 자습서의 Visual Studio 2012 버전을 따라야합니다. asp.net/mvc/tutorials/mvc-4/…
RickAndMSFT

1
나는 같은 문제가 있었고 @ {}에서 RenderSection을 꺼내 @ 만 사용했을 때 문제가 해결되었습니다. 어떤 생각이 왜이 happends
Guilherme 페레이라

1
위의 RickAnd 댓글의 링크가 작동하지 않습니다. 그러나 더 중요한 것은 이것은 튜토리얼 문제가 아니라 쉽게 고칠 수있는 VS 코드 생성 문제이며 허용 된 답변 아래의 많은 답변이 제안하는대로 실패한 줄을 제거하여 문서화해서는 안됩니다. 실제로 무슨 일이 일어나고 있는지에 대한 토론은 아래의 내 대답 ( stackoverflow.com/a/27152625/165164 )을 참조하십시오 -적어도 일부 버전의 VS.
Anne Gunn 2014

설명 된 오류는 뷰가 @section레이아웃에서 렌더링되지 않는를 정의했을 때 생성됩니다 (사용 RenderSection). 잘못된 Layout을 참조했거나 레이아웃을 참조하는 것을 전혀 잊은 경우 발생할 수 있습니다 . 참조 vonv의 대답 @
StuartLC

답변:


144

이는 마스터 Layout.cshtml에서 섹션을 정의했지만 뷰에 해당 섹션에 대한 항목을 포함하지 않았 음을 의미합니다.

_Layout.cshtml에 다음과 같은 내용이있는 경우 :

@RenderSection("scripts")

그런 다음 해당 레이아웃을 사용하는 모든 뷰 에는 동일한 이름의 포함 되어야합니다@section (섹션의 내용이 비어있는 경우에도).

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@section scripts{
    // Add something here
}

또는 required를 false로 설정하면 모든 뷰에 섹션을 추가 할 필요가 없습니다.

@RenderSection("scripts", required: false)

나 또한 당신은 포장 할 수 @RenderSectionif, 블록

@if (IsSectionDefined("scripts"))
{
    RenderSection("scripts");
}

7
귀하의 답변이 도움이되었습니다. _Layout.cshtml 내에서 @RenderSection ( "Scripts")을 식별하지 못했지만이 튜토리얼을 위해 영화 컨트롤러를 만들 때 자동으로 생성 된 뷰에서 @section Scripts {@ Scripts.Render ( " ~ / bundles / jqueryval ")} 그래서 나는 당분간 그것들을 삭제했고 모든 것이 현재 작동하고 있습니다.
Kevin Dark

23
당신의 대답은 좋은 반면. 나는 , required: false)그것을 추가 @RenderSection("scripts", required: false)하면 그것이 포함되거나 포함되지 않을 것이라는 점을 지적해야한다고 생각합니다 .
Eonasdan

3
@ KDark11 뷰를 만들 때 VS는 스크립트를 참조 할 것인지 묻습니다. 체크를 해제하십시오.
Eonasdan

1
@RenderSection("scripts", required: false)생성 된 _Layout.cshtml에 넣는 것이 올바른 솔루션 이라는 점에 동의합니다 . (이유에 대해서는 아래 설명을 참조하십시오.) 이렇게하면 전체가 아닌 하나의 파일에 수정 사항을 추가 할 수 있습니다.
Anne Gunn 2014

@Eonasdan 와우 대단해! 언제 그 기능을 추가 했습니까? 나 V1.0 말하지 마십시오 : - /
Simon_Weaver


24

나는 3 단계 a'la _ MainLayout.cshtml <--- _ Middle.cshtml <--- Page.cshtml . 이렇게해도 :

_MainLayout.cshtml

<head>
   @RenderSection("head", false)
</head>

_Middle.cshtml

@section head {
    @RenderSection("head")
}

Page.cshtml에서 정의

@section head {
   ***content***
}

여전히 오류가 발생합니다.

다음 섹션이 정의되었지만 레이아웃 페이지 "~ / Views / Shared / _Middle.cshtml": "head"에 대해 렌더링되지 않았습니다.

에 대해 밝혀졌다 오류는 Middle.cshtml가 에 의존 /Views/_ViewStart.cshtml 그것의 부모 레이아웃을 해결하기 위해. 이 문제는 Middle.cshtml에서 명시 적으로 정의하여 해결되었습니다 .

@{
Layout = "~/Views/_Shared/_MainLayout.cshtml";
}

이것이 MVC 4의 설계에 의한 것인지 버그인지 결정할 수 없습니다-어쨌든 문제가 해결되었습니다 :)


나는 같은 문제가 있습니다. 요점은 RenderBody 전에 RenderSection을 호출하고 Body Content 내부에서 섹션을 정의하고 있다는 것입니다. 그럴 수 있습니까?
Guilherme Ferreira 2014 년

오늘 저는 여기 코드 샘플 덕분에 "중간 레이아웃"을 수행하는 방법을 배웠습니다. @section Foo {@RenderSection("Foo")}섹션을 "전달"합니다! 또한 @RenderBody().
starlocke

11

제안 된 솔루션이 문제를 해결하지 않았거나 해결되지 않는 경우 수락 된 답변이 왜 수락되었는지 잘 모르겠습니다. 실제로이 주제와 관련된 두 가지 관련 문제가있을 수 있습니다.

문제 # 1

마스터 페이지 (예 :) _Layout.cshtml에는 섹션이 정의되어 있으며 필수 이지만 상속하는 뷰가이를 구현하지 않았습니다. 예를 들면

레이아웃 템플릿

<body>
    @* Visible only to admin users *@
    <div id="option_box"> 
        @* this section is required due to the absence of the second parameter *@
        @RenderSection("OptionBox") 
    </div>
</body>

상속 뷰

코드를 표시 할 필요가 없습니다@section OptionBox {} .보기에의 구현 이 없다고 생각하면 됩니다.

문제 # 1의 오류

Section not defined: "OptionBox ".

문제 # 2

마스터 페이지 (예 :) _Layout.cshtml에는 섹션이 정의되어 있으며 필수 이며 상속하는 뷰 가이를 구현했습니다. 그러나 구현보기에는 마스터 페이지 (들)에 정의되지 않은 추가 script섹션이 있습니다 .

레이아웃 템플릿

same as above

상속 뷰

<div>
  <p>Looks like the Lakers can still make it to the playoffs</p>
</div>
@section OptionBox {
<a href"">Go and reserve playoff tickets now</a>
}
@section StatsBox {
<ul>
    <li>1. San Antonio</li>
    <li>8. L. A. Lakers</li>
</ul>
}

문제 # 2의 오류

The following sections have been defined but have not been rendered for the layout page "~/Views/Shared/_Layout.cshtml": "StatsBox"

OP의 문제는 Issue # 2와 유사하며 수락 된 답변은 Issue # 1에 대한 것입니다.


3
동의, OP의 의견은 오류를 해결하기 위해 뷰에서 섹션을 삭제했다는 것입니다. 즉, 뷰에는 섹션이 정의되었지만 레이아웃에는 정의되지 않았으며 대부분의 답변 주소 (에 해당하는 문제 # 2 설명하는 오류) 다른 모든 답변은 해당 오류를 생성하지 않고 대신 "섹션이 정의되었지만 ... 렌더링되지 않음"이 아닌 "섹션이 정의되지 않음"을 설명합니다.
AaronLS

8

우리의 솔루션이 다른 사람들과 충분히 달랐기 때문에 여기에 문서화하겠습니다.

메인 레이아웃, 중간 레이아웃 및 최종 작업 페이지 렌더링을 설정했습니다. Main.cshtml <-Config.cshtml <-Action.cshtml

web.config가 customErrors='On/RemoteOnly'사용자 지정 오류를 받았을 때만 예외가없고 Application_Error호출 되지 않았습니다. 나는 이것을 Layout = nullError.cshtml 에서 온라인으로 잡을 수 있습니다. 예외는 질문, 누락 된 스크립트 섹션에서와 같습니다.

Main.cshtml (필수 : false 포함)에 정의되어 있고 Action.cshtml에는 스크립트 섹션에 작성된 내용이 없습니다.

해결책은 @section scripts { @RenderSection("scripts", false) }Config.cshtml 에 추가하는 것이 었습니다.


7

기본적으로 _Layout.cshtml에 다음 이 없을 때 발생합니다 .

@RenderSection("scripts", required: false)

또는

@RenderSection("scripts")  

없이

required: false

따라서 _Layout.cshtml 에 @RenderSection ( "scripts", required : false)를 추가하면 특별히 Kendoui 생성 프로젝트 를 작업하는 개발자에게 적합합니다.


7

새 모델을 만드는 데 사용할 때 Visual Studio의 일부 버전이 자동으로 생성하는 View 파일간에 불일치가있는 것으로 보입니다. 새로운 VS 2013 Community Edition을 사용 하고 http://www.w3schools.com/aspnet/mvc_app.asp 에서 W3Schools 자습서를 통해이 문제가 발생 했지만 위의 의견은 자습서 지침 또는 단일 버전의 VS.

그냥 제거하면 오류 메시지 가 사라지는 것은 사실입니다 .

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

Visual Studio에서 자동 생성 된 레이아웃 생성 / 편집의 줄입니다.

그러나이 솔루션은 근본 원인을 해결하지 못하거나 튜토리얼을 마치는 것 이상을 할 수있는 좋은 장소에 남겨 두지 않습니다. 실제 애플리케이션 개발의 어느 시점 (아마 상당히 초기)에 주석 처리 솔루션이 앱에서 제거하는 jquery 유효성 검사 코드에 액세스하려고 할 것입니다.

VS를 사용하여 새 모델을 만드는 경우 만들기, 삭제, 세부 정보, 편집 및 색인의 5 가지보기 파일 세트도 생성됩니다. 이러한보기 중 두 가지 인 만들기 및 편집은 사용자가 모델의 기반이되는 데이터베이스 레코드의 필드에 대한 데이터를 추가 / 편집 할 수 있도록하기위한 것입니다. 실제 앱의 이러한 뷰의 경우 레코드를 db에 저장하기 전에 jquery 유효성 검사 라이브러리를 사용하여 일정량의 데이터 유효성 검사를 수행 할 수 있습니다. 이것이 VS가 다음 줄을 추가하는 이유입니다.

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

이 두 가지보기의 맨 아래에 있습니다. 자동 생성 된 코드는 해당 뷰에서 유효성 검사 라이브러리를 사용할 수 있도록 시도하지만 다른 뷰에서는 사용할 수 없습니다.

VS가 공유 _Layout.cshtml 파일에 해당 줄을 추가하지 않거나 위의 답변 중 하나를 참조하여 추가하지만 주석 처리 된 상태로두기 때문에 오류가 발생합니다. 이 라인은

@RenderSection("scripts", required: false)

일부 뷰에 스크립트 섹션이있는 경우 (Create 및 Edit처럼) 레이아웃에 RenderSection 명령이 포함되어 있어야합니다. 일부 스크립트에 섹션이 있고 일부가없는 경우 (삭제, 세부 정보 및 색인에는 없음) RenderSection 명령에 required: false매개 변수 가 있어야합니다 .

따라서 자습서를 마치는 것 이상을 수행하려는 경우 가장 좋은 해결책은 편집 및 만들기 뷰에서 코드를 제거하지 않고 _Layout.cshtml에 문을 추가하는 것입니다.

추신 여기에 필요한 것은 '번들'에 있고 require 문은 프로젝트에 존재하지 않는 번들 폴더에 파일을 포함하려는 것처럼 보입니다. 그러나 디버그 빌드 및 자습서의 경우 번들 파일이 한 번에 하나씩 포함되므로 관련이 없습니다. 참조 : http://www.asp.net/mvc/overview/performance/bundling-and-minification 여기서 문제가되는 코드는 페이지 아래쪽의 3 분의 2 정도에 대해 간략하게 언급됩니다.


이것은 "바위"이며 정말 좋은 설명입니다. 아마도 .... 많은 표를하지 않았다 이후 지금에 와서
JosephDoggie

2

Visual Studio 2012에서 ASP.NET MVC 4 자습서를 진행하는 동안 "컨트롤러에서 모델 데이터 액세스"섹션에서 동일한 오류가 발생했습니다. 수정은 아주 간단합니다.

Visual Studio 2012에서 공유 폴더의 _Layout.cshtml 문서 내에서 새 ASP.NET MVC 4 웹 응용 프로그램을 만들 때 "scripts"섹션이 주석 처리됩니다.

    @*@RenderSection("scripts", required: false)*@

줄의 주석을 해제하면 샘플 코드가 작동합니다.

    @RenderSection("scripts", required: false)

1

MVC 초보자를위한 튜토리얼을 구현하는 동안 동일한 문제가 있습니다. layout.cshtml 파일에서 @RenderSection을 수정하라는 다양한 제안이 있지만 사용하지는 않습니다.

검색을 많이했는데 (View / Edit.cshtml) 및 기타 cshtml 파일에서 생성 된 스크립트 태그가 렌더링되지 않음을 발견했습니다.

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

} **

그래서 나는 그 줄을 제거하고 응용 프로그램이 원활하게 실행되기 시작합니다.



0

웹에서 오류를 검색하여이 페이지를 찾았습니다. 저는 Visual Studio 2015를 사용하고 있으며 이것은 첫 번째 MVC 프로젝트입니다.

렌더링 섹션 앞에 @ 기호를 놓친 경우 동일한 오류가 발생합니다. 미래의 초보자를 위해 이것을 공유하고 싶습니다.

 @RenderSection("headscripts", required: false)

0

@ 섹션이있는 부분보기를 참조하는 _Layout 파일의 @ 섹션 내에서 섹션을 렌더링하고있는 것 같습니다. 즉, @ 섹션 내에 @ 섹션을 중첩했습니다. _Layout 파일에서 rendersection 주위의 @section을 제거하십시오.


0

다음을 사용하여이 문제를 해결했습니다.

@await Html.PartialAsync("_ValidationScriptsPartial")

0

나에게 문제는 내 _Layout.cshtml에 있었는데 조건 안에 RenderSection이 있습니다.

 @if (theme == "Red" || theme == "Green")
  {
       <div>
       @RenderSection("Footer", false)
       </div>
   }

그리고 내 아이보기에는 조건이 없었다

@section Footer{
        <div>
            @Html.AwButton("Reject", "Reject")
            @Html.AwSubmit("Ok", "Ok")
        </div>
    }

그래서 테마에 관계없이 아이가 바닥 글을 추가했습니다. 그러나 테마가 Red 또는 Green이 아닌 경우 부모에서 Footer를 추가하지 않았고 처리되지 않은 예외가 발생했습니다.


-1

용어 ""의 철자 및 대 / 소문자 확인

@RenderSection ( "name", required : false)을 쓸 때마다 면도기 뷰에 섹션 @section name {}이 포함되어 있는지 확인하여 ""용어의 철자와 대문자 / 소문자를 확인하십시오.이 경우에는 "스크립트"가 맞습니다.


-1

보기에서 스크립트 섹션 사용의 올바른 철자를 입력했는지 확인하십시오.

정답은

@section scripts{ //your script here}

입력했다면 @section script{ //your script here}이것은 잘못된 것입니다.

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