참조
https://learn.microsoft.com/en-us/previous-versions/aspnet/wtxbf3hh(v=vs.100)
페이지 구조
① 마스터 페이지
- 여러 페이지에서 공통으로 사용할 수 있는 레이아웃 정의
- 사이트의 전체 레이아웃을 정의하는 페이지
- header, footer, navigation bar 등의 공통 요소를 포함함
- 각 페이지는 마스터 페이지를 기반으로 구성됨
- 마스터 페이지는 중첩될 수 있음
: 한 마스터 페이지 안에 다른 마스터 페이지를 포함하는 구조를 만들 수 있음
- 브라우저에 렌더링되는 모든 서버 컨트롤을 포함하는 컨테이너로 작동함
- 확장자 : .master
- @ Master 디렉티브로 시작함
※ ContentPlaceHolder 컨트롤
- 마스터 페이지 안에서 각 콘텐츠 페이지가 개별 콘텐츠를 삽입할 수 있는 영역
- 콘텐츠 페이지는 해당 영역에 내용을 추가/변경할 수 있음
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %>
<html>
<head>
<title>My Site</title>
</head>
<body>
<header>
<h1>Welcome to My Site</h1>
<nav>
<!-- 공통 네비게이션 메뉴 -->
</nav>
</header>
<main>
<!-- ContentPlaceHolder : 콘텐츠 페이지가 채울 부분 -->
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
</main>
<footer>
<!-- 공통 푸터 -->
<p>Footer content here</p>
</footer>
</body>
</html>
② 콘텐츠 페이지
- 마스터 페이지의 레이아웃을 상속받는 개별 페이지
- 마스터 페이지에서 정의된 공통 레이아웃을 포함하면서, 개별 콘텐츠를 가짐
- 사용자가 콘텐츠 페이지에 접근할 때 마스터 페이지와 콘텐츠 페이지가 병합되면서 결과가 만들어짐
- Content 컨트롤 외부에 HTML 마크업 또는 서버 컨트롤을 작성할 수 없음(스크립트 블록은 허용)
- 마스터 페이지를 포함하는 컨테이너로 작동함
→ 마스터 페이지의 public 멤버에 접근할 수 있음
- 확장자 : .aspx
- @ Page 디렉티브로 시작함
※ Content 컨트롤
- 마스터 페이지의 ContentPlaceHolder 영역에 들어갈 콘텐츠 정의
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!-- 마스터 페이지 내 ContentPlaceHolder 중에 ID가 MainContent인 영역에 들어갈 콘텐츠 정의 -->
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<h2>Home Page Content</h2>
<p>Welcome to the home page!</p>
</asp:Content>
- MasterPageFile : 바인딩할 마스터 페이지 파일 경로 기재
마스터 페이지의 런타임 동작
1. 페이지 요청
- 사용자가 콘텐츠 페이지의 URL을 입력하여 페이지를 요청함
2. @ Page 디렉티브 처리
- 요청된 페이지의 @ Page 디렉티브가 읽힘
- 해당 디렉티브가 마스터 페이지를 참조한다면, 그 마스터 페이지도 읽힘
- 처음 요청하는 경우, 콘텐츠 페이지와 마스터 페이지는 모두 컴파일됨
3. 마스터 페이지와 콘텐츠 페이지 병합
- 콘텐츠 페이지의 Control Tree와 마스터 페이지가 병합됨
※ Control Tree : 페이지 내 모든 컨트롤의 계층 구조
// Control Tree 구조
Page
Master Page
(Master page markup and controls)
ContentPlaceHolder
Content page markup and server controls
(Master page markup and controls)
ContentPlaceHolder
Content page markup and server controls
(Master page markup and controls)
4. Content 컨트롤의 내용 병합
- 콘텐츠 페이지 내 Content 컨트롤의 내용이 마스터 페이지의 ContentPlaceHolder 컨트롤에 병합됨
5. 최종 페이지 렌더링
▶ 기타 내용
- 마스터 페이지에서 페이지 전체 속성을 설정하면 콘텐츠 페이지의 동작에 영향을 줄 수 있음
→ 마스터 페이지 설정이 우선권을 가짐
ex) 콘텐츠 페이지에서 EnableViewState를 true로 설정하고 마스터 페이지에서 false로 설정하면 false로 처리됨
- 페이지 요청은 콘텐츠 페이지의 컨텍스트에서 실행됨
→ HttpRequest 객체의 CurrentExecutionFilePath 속성을 사용하면,
마스터 페이지 코드인지 콘텐츠 페이지 코드인지와 관계 없이, 콘텐츠 페이지의 경로를 반환함
· 이미지 등 리소스의 URL을 지정할 때 주의
- 마스터 페이지와 콘텐츠 페이지는 서로 다른 경로에 존재할 수 있음
'C#' 카테고리의 다른 글
[C#/dotnet] 서버 컨트롤 (0) | 2024.10.24 |
---|---|
[C#/dotnet] View State (1) | 2024.10.24 |
[C#/dotnet] 페이지 수명 주기 (3) | 2024.10.24 |
[C#/dotnet] 제네릭 (Generics) (0) | 2024.10.23 |
[C#/dotnet] LINQ (Language-Integrated Query) (0) | 2024.10.23 |