마스터 페이지
마스터 페이지는 확장명이 .Master인 asp.net 파일로 정적 텍스트, html 요소 및 서버 컨트롤이 포함될 수 있는 레이아웃을 미리 정의해둔 파일이다. 마스터 페이지는 .aspx 페이지의 @Page지시문을 @Master지시문으로 대체하는 것으로 일반 .aspx페이지와 식별된다.
- 마스터 파일명이 Test.Master일 때
| <%@ Master Language="C#" CodeBehind="Test.Master.cs" %> | cs |
컨텐츠 자리 표시자
마스터 페이지에는 모든 페이지에 표시되는 정적 텍스트와 컨트롤 외에도 하나 이상의 ContentPlaceHolder 컨트롤이 포함되어 있다. 이러한 자리 표시자 컨트롤은 그 자리에 표시할 컨텐츠의 영역을 정의한다. 표시할 컨텐츠는 컨텐츠 페이지(일반 .aspx 페이지)에서 정의된다. 컨텐츠 페이지와의 매핑을 위해 ID를 설정해야 한다.
| <asp:ContentPlaceHolder ID="Main" runat="server"></asp:ContentPlaceHolder> <asp:ContentPlaceHolder ID="Footer" runat="server"></asp:ContentPlaceHolder> | cs |
컨텐츠 페이지
마스터 페이지의 자리 표시자 컨트롤에 매핑되는 컨텐츠를 정의하려면 특정 마스터 페이지에 바인딩된 asp.net 페이지(.aspx파일과 혹은 필요에 따라 code behind 파일)인 개별 컨텐츠 페이지를 만든다. 마스터 페이지를 @Page지시문을 통해 바인딩을 설정하면 된다.
| <%@ Page Language="C#" MasterPageFile="~/Test.Master" AutoEventWireup="true" CodeBehind="Main.aspx.cs" %> | cs |
컨텐츠 페이지에 컨텐츠를 만들이 위해서는 Content컨트롤을 추가하여 마스터 페이지에 있는 ContentPlaceHolder컨트롤에 매핑해야 한다. Content컨트롤을 만든 후에는 텍스트와 컨트롤을 추가하면 된다. 컨텐츠 페이지에서는 서버 코드의 스크립트 블록을 제외하고 Content컨트롤의 외부에 있는 것은 모두 오류로 처리된다.
| <asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server"> Main content. </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" > Footer content. </asp:content> | cs |
마스터 페이지의 런타임 동작
1. 사용자가 컨텐츠 페이지의 URL을 입력하여 페이지를 요청한다.
2. 불러온 페이지에서 @Page지시문을 읽는다. 지시문이 마스터 페이지를 참조하면 마스터 페이지도 읽는다. 페이지를 처음 요청한 경우 두 페이지가 모두 컴파일된다.
3. 컨텐츠가 업데이트된 마스터 페이지가, 컨텐츠 페이지의 컨트롤 트리에 병합된다.
4. 개별 Content컨트롤의 컨텐츠가 마스터 페이지에 있는 ContentPlaceHolder컨트롤에 병합된다.
5. 병합된 페이지가 브라우저에 렌더링된다.