IT

다음 섹션이 정의 레이아웃 페이지 "~ / Views / Shared / _Layout.cshtml"에 대해 논의되지 않습니다. "서비스"

lottoking 2020. 9. 11. 08:17
반응형

다음 섹션이 정의 레이아웃 페이지 "~ / Views / Shared / _Layout.cshtml"에 대해 논의되지 않습니다. "서비스"


저는 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"에 대해 설명되지 않습니다. "스크립트"

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

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

감사합니다,


이것은 마스터 Layout.cshtml에서 섹션을 정의했지만 뷰에 해당 섹션에 대한 항목을 포함하지 않습니다.

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

@RenderSection("scripts")

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

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

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

@RenderSection("scripts", required: false)

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

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

또한 _Layout.cshtml또는 다음 줄을 추가 할 수 있습니다 _Layout.Mobile.cshtml.

@RenderSection("scripts", required: false)

나는 3 단계 일품 _ 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의 설계에 의한 것인지 버그인지 결정할 수 없습니다-어쨌든 문제가 해결되었습니다 :)


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

문제 # 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에 대한 것입니다.


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

메인 레이아웃, 중간 레이아웃 및 최종 작업 페이지 렌더링을 설정했습니다. 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 에 추가하는 것이 었습니다.


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

@RenderSection("scripts", required: false)

또는

@RenderSection("scripts")  

없이

required: false

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


새 모델을 만드는 데 사용할 때 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 정도에 대해 간략하게 언급됩니다.


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)

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

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

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

} **

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


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

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

 @RenderSection("headscripts", required: false)

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


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

정답은

@section scripts{ //your script here}

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


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

@await Html.PartialAsync("_ValidationScriptsPartial")

용어 ""의 철자 및 대 / 소문자를 확인하십시오.

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

참고 URL : https://stackoverflow.com/questions/10971149/the-following-sections-have-been-defined-but-have-not-been-rendered-for-the-layo

반응형