개요
페이지의 실행주기가 언뜻 아무것도 아닌것처럼 보이나 어떠한 복잡한 로직이 페이지에 구현될때
실행주기때문에 머리가 엉킨 경험을 한번씩은 경험 해 보았을 것이라고 생각합니다.
페이지의 실행주기를 한번만 확실히 집고 넘어가면 앞으로 개발하는데 많은 장점이 있을 듯 합니다.
<%@ Page Language="C#" Debug=true %>
<Script Language="C#" Runat="Server">
string s = "데이타 바인드 하기";
private void Page_Init(Object o , EventArgs e)
{
Response.Write("Page_Init 이벤트 발생!<p>");
}
private void Page_Load(Object o , EventArgs e)
{
Response.Write("Page_Load 이벤트 발생!<p>");
}
private void Page_PreRender(Object o , EventArgs e)
{
Response.Write("Page_PreRender 이벤트 발생!<p>");
}
private void Page_Unload(Object o , EventArgs e)
{
//페이지가 메모리에서 언로드 될때 발생, 아직 해제(disposed)되지는 않는다
//응답을 사용할수 없다(Respnose개체 사용 불가)
//화면에 출력하는 코드를 사용할 수 없다
}
private void Page_Disposed(Object o , EventArgs e)
{
//페이지 생명주기 마지막 단계
//페이지가 메모리에서 해제됨
}
private void DoClick(Object o , EventArgs e)
{
Response.Write("클릭 이벤트 발생!(포스트 백 일어남)<p>");
//Page.DataBind();
}
</Script>
<form runat="server">
<asp:Button Runat="Server" OnClick="DoClick" Text="클릭!" /><p> <%# s %>
</form>
위의 코드는 페이지 실행주기동안에 발생하는 대부분의 이벤트입니다.
1. 페이지가 처음 로딩될 경우 [ init -> load -> PostBack체크 -> preRender 순으로 발생 ]
2. 포스트 백(버턴클릭시)이 될 경우 [ init -> load -> PostBack체크 -> 버턴클릭이벤트 -> PreRenader 순으로 발생 ]
주의 할 것은 포스트백이 일어날때 Page_Load 이벤트는 다시 호출되며 컨트롤의
이벤트보다 먼저 수행된다는 점입니다.
실수를 해보지 않은 사람은 다 아는 내용이지 않는냐 하겠지만 한번씩 실수를 해본 사람은
이미 알고 있고 또한 기본적이지만 중요한 개념입니다.
그리고 Page_PreRender 이벤트는 컨트롤의 이벤트 뒤에 또는 처음로딩시 호출되기에
나름대로 유용하게 쓰일 수 있는 이벤트이기도 하죠.
3.
private void Page_DataBind(Object o , EventArgs e)
{
Response.Write("Page_DataBind 이벤트 발생<p>");
}
private void Page_DataBind(Object o , EventArgs e)
{
Response.Write("Page_DataBind 이벤트 발생<p>");
}
Page의 또다른 이벤트인 DataBind 입니다.
이 놈은 페이지에서 DataBind 가 호출될때 발생하는 이벤트 입니다. ( ex> Page.DataBind(); )
이 외에도 실행주기에 대한 내용은 많지만 제가 아는 내용은 대략 이정도군요^^
페이지 요구시 처리과정
- init : 페이지 초기화
- ViewState복구
- Load : 일반적으로 알고 있는 Page_Load()
- PostBack 이벤트 처리
- PreRender
- ViewState 저장
- Render
- UnLoad : 페이지 객체 소멸 직전에 발생하는 이벤트
서버 컨트롤의 실행주기
- 컨트롤 생성
- Init
- ViewState 복구
- PostBack 데이터 처리
- Load
- 데이터 변경 이벤트
- PastBack 이벤트
- PreRenser
- ViewState 저장
- Render
- UnLoad