[asp.net-mvc] ASP.NET MVC : @section의 목적은 무엇입니까? [닫은]
ASP.NET MVC 응용 프로그램의 경우이 블로그 기사를 보았습니다 . 저자 ScottGu는 @section
Index.cshtml에 추가 합니다.
몇 가지 질문이 있습니다 (위의 기사 참조).
- Index.cshtml이 공유보기입니까?
- 예제 코드는
@section
특정보기에서 코드를 사용 합니다. 왜?
누군가 @section
View에서 언제, 언제 사용하는지 설명해 주 시겠습니까?
답변
@section
콘텐츠를 정의하는 것은 공유보기에서 무시됩니다. 기본적으로 공유보기를 조정하는 방법입니다 (Web Forms의 마스터 페이지와 유사).
당신은 찾을 수 이 매우 흥미로운 스콧 특별시의 쓰기를 위로 .
편집 : 추가 질문 설명을 기반으로
@RenderSection
구문은 다음과 같은 공유보기로 전환 :
<div id="sidebar">
@RenderSection("Sidebar", required: false)
</div>
그러면 @Section
구문으로 뷰에 배치됩니다 .
@section Sidebar{
<!-- Content Here -->
}
MVC3 +에서는 뷰에 직접 사용할 레이아웃 파일을 정의하거나 모든 뷰에 대한 기본 뷰를 가질 수 있습니다.
공통 뷰 설정은 _ViewStart.cshtml에서 다음과 유사한 기본 레이아웃 뷰를 정의 할 수 있습니다.
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
이 스 니펫에 표시된대로 index.cshtml과 같이 파일에서 직접 사용하도록 공유보기를 설정할 수도 있습니다.
@{
ViewBag.Title = "Corporate Homepage";
ViewBag.BodyID = "page-home";
Layout = "~/Views/Shared/_Layout2.cshtml";
}
이 SO 답변 에서 몇 가지 더 언급 하여이 설정을 조정할 수있는 다양한 방법이 있습니다 .
답변
좋은 예가 Javascript입니다. 이것이 가장 좋은 방법이므로 브라우저에서 렌더링되는 페이지의 맨 아래에 오기를 원합니다.
페이지 중간에만 액세스 할 수있는 레이아웃 / 마스터 페이지를 기반으로 한 뷰에서이 작업을 어떻게 수행 하시겠습니까?
레이아웃 페이지 하단에 스크립트 섹션을 선언하여이 작업을 수행합니다. 그런 다음보기 페이지에서 레이아웃 페이지의 맨 아래에 Javascript가 포함 된 내용을 추가 할 수 있습니다.
답변
레이아웃 페이지에 정의 된 자리 표시 자에 약간의 코드 / 컨텐트를 렌더링하려는 경우 섹션을 사용하려고합니다.
링크 한 특정 예제에서 _Layout.cshtml에서 RenderSection을 정의했습니다. 해당 레이아웃을 사용하는 모든 뷰는 레이아웃에 정의 된 것과 동일한 이름의 @ 섹션을 정의 할 수 있으며 레이아웃의 RenderSection 호출을 대체합니다.
Index.cshtml에서 해당 레이아웃을 사용하는 방법을 알고 싶습니까? 이것은 약간의 MVC / Razor 규칙 때문입니다. 그가보기를 추가하고있는 대화 상자를 보면 “레이아웃 또는 마스터 페이지 사용”상자가 선택되고 그 바로 아래에 “Razor _viewstart 파일에 설정된 경우 비워 둡니다”라는 메시지가 표시됩니다. 표시되지 않지만 _ViewStart.cshtml 파일 내부에는 다음과 같은 코드가 있습니다.
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
viewstarts가 작동하는 방식은 동일한 디렉토리 또는 하위 디렉토리 내의 cshtml 파일이 자체적으로 실행되기 전에 ViewStart를 실행하는 것입니다.
Index.cshtml이 Shared / _Layout.cshtml을 사용한다는 것을 알려줍니다.
답변
@Section
템플릿에서 코드 를 정의하여 다른 파일에 포함시킬 수 있습니다. 예를 들어 템플릿에 정의 된 사이드 바는 다른 포함 된 뷰에서 참조 될 수 있습니다.
//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);
도움이 되었기를 바랍니다.