asp.netページのライフサイクル じぶんなりのまとめ。

これ、把握してない開発も結構居るんじゃないだろうか。ちょっと複雑な動きをするページを作るときは、これを把握してないと理解できない挙動が出てくることになると思うけど、それを無理やりPreRenderで正常な値に書き戻してるようなコードを見たことがある。


== 段階 1 - 初期化
(PreInit)(Init)(InitComplete)
コントロールはaspxで宣言されたの属性を持つ。
ビュー ステート内容は、まだロードされていない。
ビュー ステートを利用する動的コントロールの生成をするなら、ここまでにやる。
★Init イベント

== (postback時のみ) 段階 2 -ビュー ステートのロード
(LoadState)
ビュー ステート内容からコントロールの属性をセットする。

== (postback時のみ) 段階 3 - ポストバック データのロード
(ProcessPostData)
ポストバックされたデータをコントロールに書き戻す。
IDを元にコントロールを検索し、
該当コントロールの LoadPostData関数 に、ポストバックされたデータを渡すことで
コントロールの属性が更新される。

== 段階 4 - ロード
(PreLoad)(Load)
非postback時は、コントロールはaspxで宣言された属性を持つ。
postback時は、コントロールにビューステートとポストバックデータが設定されている状態でこの処理が行われる。
(段階 2, 3による)
★Load イベント

== (postback時のみ) 段階 4.5 - 動的に作成されたコントロールへの,ポストバック データのロード
(ProcessPostDataSecond)
「ロード」は「ポストバック データのロード」の後で発生する。
そのため、Loadイベント内で動的に生成されたコントロールに「ポストバック データのロード」を
行うためのステップが存在する。

== (postback時のみ) 段階 5 - ポストバック イベントの起動
(ChangeEvents)(PostBackEvents)
ポストバック データを検査して、イベントを発生させる。

★様々なコントロールのイベント(change event, click event, etc...)

== 段階 5.5 - PreRender イベント
(PreRender)
PreRender イベントを発生させる。
本当にレンダリングの直前におこるわけではなく、ビュー ステート保存の前におこる。
★PreRender イベント

== 段階 6 - ビュー ステートの保存
(SaveState)
ビュー ステートを保存する。
具体的には、Base 64 エンコード文字列に変換して__viewstateとしてレンダリングされるようにする。

== 段階 7 - レンダリング
HTML文字列を生成する。
(コントロールの RenderControl関数 を親子関係に沿って再帰的に呼び出す)

★UnLoad イベント