내가 뭔가 잘못하고 있으면 나는 깨달음을 얻고 싶다. 나는있을거야.ASP.NET MVC에서 @RenderSection (@RenderPage와 비교)을 사용하면 어떤 이점이 있습니까?
내보기 페이지에 다음 코드가있는 경우 : (사용 가능한 경우) 런에서 예외를 방지하기 위해
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
sample content.
</p>
@section header
{
<div id="header">
Chapter 3a: Creating a Consistent Look
</div>
}
... 나는 또한 섹션을 렌더링하는 내 레이아웃 페이지에서 FF를해야한다을 시간 : 즉 (예를 들어, 내가 그들 모두를 주석) 섹션을 렌더링하기 전에 섹션을 확인합니다 위에 나는 마지막 4 개 라인이없는 경우
@if (IsSectionDefined("header"))
{
@RenderSection("header")
}
그러나, 컴파일러가 나는 부분이 있는지 확인하지 않습니다 내보기 페이지에 정의되어 있으며 응용 프로그램을 빌드하고 실행할 수 있습니다. 런타임 동안, 내가 페이지를 실행할 때이 오류를 얻을 것이다에만 다음입니다 :
다음 섹션이 정의되어 있지만, 레이아웃 페이지 "~에 대한 렌더링되지 않은/조회/공유/_Layout2.cshtml ":"헤더 ".
내 질문은 다음 FF 있습니다
- 우리가 어떻게 발생하지 않도록 할 수 있습니까? 컴파일러가 누락 된 코드
@RenderSection
을 확인하도록하는 설정이 있습니까? - 전체 응용 프로그램에서
@section
키워드가 있는지 수동으로 검색해야하기 때문에@section
기능을 사용하면 시스템 유지 관리가 쉽지 않습니다 (질문 1에 긍정적 인 답변이없는 것으로 가정). - 이 경우
@RenderPage
과 반대로@RenderSection
을 사용하면 어떤 이점이 있습니까? @section
도 조건부로 만들 수 있습니까?
빠른 답변 감사드립니다.내가 이해하는 것으로부터 섹션의 관계에 대한 섹션의 관계에 관해서는 서버 측 코드에서 자리 표시 자 객체의 존재 여부를 확인합니다 (코드에서 배후 객체를 사용할 수 없으므로이 배후 객체는 그렇지 않습니다). 귀하의 페이지에 존재), 문자열 (예 : "헤더")는 컴파일 타임에 확인되지 않습니다. 내가 자리 표시 자의 사용법을 올바르게 이해하고 있기를 바랍니다. 감사! – nolisj
사실, 그렇지 않습니다. 그것이 작동하는 방식이 아닙니다. 코드 숨김은 전혀 관련이 없습니다. 실제로 Mvc2 aspx 뷰에는 코드 숨김 코드조차 없기 때문에 내 말은 개념 수준에서 태그는 @RenderSection() 문과 동일하고 태그는 @section {} 선언과 동일하다는 것입니다. 나는 그들이 똑같이 작동한다는 것을 암시하지는 않았다. 아직도 저는 컴파일 타임에 둘 중 어느 것도 검사하지 않는다고 확신합니다. csproj에서 태그를 true로 설정하고 어떤 것이 향상되는지 확인할 수 있습니다. –
나는 당신이 의미하는 것을 이해합니다. 나는이 자리 표시 자 ()보다이 자리 표시 자 ()를 언급한다고 생각했습니다. 유사점 (ContentPlaceHolder == @RenderSection(); Content == @section)에 대해서는 이해하는 한 올바른 것으로 보입니다. 그러나 ContentPlaceHolder/Content 쌍이 @RenderSection()/@ 섹션 쌍과 다른 점은 ContentPlaceHolder/Content 쌍 (및 서로의 관계)이 @RenderSection()/@보다 더 분명하고 명시 적/섹션 쌍. –
nolisj