Asp.net-life-cycle
ASP.NET-ライフサイクル
ASP.NETライフサイクルは、次のように指定します。
- ASP.NETはページを処理して動的な出力を生成します
- アプリケーションとそのページがインスタンス化されて処理されます
- ASP.NETはページを動的にコンパイルします
ASP.NETライフサイクルは、2つのグループに分けることができます。
- アプリケーションのライフサイクル
- ページライフサイクル
ASP.NETアプリケーションのライフサイクル
アプリケーションのライフサイクルには、次の段階があります。
- ユーザーは、アプリケーションリソースであるページへのアクセスを要求します。 ブラウザはこのリクエストをWebサーバーに送信します。
- 統合パイプラインが最初のリクエストを受信すると、次のイベントが発生します。
- クラスApplicationManagerのオブジェクトが作成されます。
- クラスHostingEnvironmentのオブジェクトが作成され、リソースに関する情報が提供されます。
- アプリケーションの最上位アイテムがコンパイルされます。
- 応答オブジェクトが作成されます。 HttpContext、HttpRequest、HttpResponseなどのアプリケーションオブジェクトが作成され、初期化されます。
- HttpApplicationオブジェクトのインスタンスが作成され、リクエストに割り当てられます。
- 要求は、HttpApplicationクラスによって処理されます。 リクエストを処理するために、このクラスによってさまざまなイベントが発生します。
ASP.NETページのライフサイクル
ページが要求されると、ページはサーバーメモリにロードされ、処理され、ブラウザに送信されます。 次に、メモリからアンロードされます。 これらの各ステップで、メソッドとイベントが使用可能になりますが、これらはアプリケーションのニーズに応じてオーバーライドできます。 つまり、独自のコードを記述して、デフォルトコードをオーバーライドできます。
Pageクラスは、ページ上のすべてのコントロールの階層ツリーを作成します。 ディレクティブを除くページ上のすべてのコンポーネントは、このコントロールツリーの一部です。 ページディレクティブにtrace = "true"を追加すると、コントロールツリーを表示できます。 「ディレクティブ」と「イベント処理」でのページディレクティブとトレースについて説明します。
ページのライフサイクルフェーズは次のとおりです。
- 初期化
- ページ上のコントロールのインスタンス化
- 状態の復元と維持
- イベントハンドラーコードの実行
- ページのレンダリング
ページサイクルを理解することは、ページライフサイクルのどの段階でも特定のことを行うためのコードを書くのに役立ちます。 また、カスタムコントロールを作成して適切なタイミングで初期化し、プロパティにビューステートデータを入力し、コントロールの動作コードを実行するのにも役立ちます。
ASP.NETページのさまざまな段階は次のとおりです。
- ページ要求-ASP.NETはページ要求を取得すると、ページを解析してコンパイルするか、ページのキャッシュバージョンがあるかを決定します。したがって、応答が送信されます。
- ページのライフサイクルの開始-この段階で、リクエストオブジェクトとレスポンスオブジェクトが設定されます。 リクエストが古いリクエストまたはポストバックの場合、ページのIsPostBackプロパティはtrueに設定されます。 ページのUICultureプロパティも設定されます。
- ページの初期化-この段階では、UniqueIDプロパティを設定することでページのコントロールに一意のIDが割り当てられ、テーマが適用されます。 新しいリクエストの場合、ポストバックデータがロードされ、コントロールプロパティがビューステート値に復元されます。
- ページの読み込み-この段階では、コントロールのプロパティはビューステートとコントロールステートの値を使用して設定されます。
- 検証-検証コントロールの検証メソッドが呼び出され、正常に実行されると、ページのIsValidプロパティがtrueに設定されます。
- ポストバックイベント処理-要求がポストバック(古い要求)の場合、関連するイベントハンドラーが呼び出されます。
- ページのレンダリング-この段階では、ページとすべてのコントロールのビューステートが保存されます。 ページは各コントロールのRenderメソッドを呼び出し、レンダリングの出力はページのResponseプロパティのOutputStreamクラスに書き込まれます。
- Unload -レンダリングされたページはクライアントに送信され、ResponseやRequestなどのページプロパティがアンロードされ、すべてのクリーンアップが実行されます。
ASP.NETページライフサイクルイベント
ページのライフサイクルの各段階で、ページはいくつかのイベントを発生させます。これらのイベントはコーディングできます。 イベントハンドラは基本的に、Onclickやhandleなどの宣言的な属性を使用して、イベントにバインドされた関数またはサブルーチンです。
ページライフサイクルイベントは次のとおりです。
- PreInit -PreInitは、ページライフサイクルの最初のイベントです。 IsPostBackプロパティをチェックし、ページがポストバックかどうかを判断します。 テーマとマスターページの設定、動的コントロールの作成、プロファイルプロパティ値の取得と設定を行います。 このイベントは、OnPreInitメソッドをオーバーロードするか、Page_PreInitハンドラーを作成することで処理できます。
- Init -Initイベントはコントロールプロパティを初期化し、コントロールツリーが構築されます。 このイベントは、OnInitメソッドをオーバーロードするか、Page_Initハンドラーを作成することで処理できます。
- InitComplete -InitCompleteイベントにより、ビューステートを追跡できます。 すべてのコントロールは、ビューステートトラッキングをオンにします。
- LoadViewState -LoadViewStateイベントにより、ビューステート情報をコントロールにロードできます。
- LoadPostData -このフェーズでは、すべての入力フィールドの内容が<form>タグで定義され、処理されます。
- PreLoad -ポストバックデータがコントロールにロードされる前にPreLoadが発生します。 このイベントは、OnPreLoadメソッドをオーバーロードするか、Page_PreLoadハンドラーを作成することで処理できます。
- Load -最初にページに対してLoadイベントが発生し、次にすべての子コントロールに対して再帰的に発生します。 コントロールツリーのコントロールが作成されます。 このイベントは、OnLoadメソッドをオーバーロードするか、Page_Loadハンドラーを作成することで処理できます。
- LoadComplete -ロードプロセスが完了し、コントロールイベントハンドラーが実行され、ページの検証が行われます。 このイベントは、OnLoadCompleteメソッドをオーバーロードするか、Page_LoadCompleteハンドラーを作成することで処理できます。
- PreRender -PreRenderイベントは、出力がレンダリングされる直前に発生します。 このイベントを処理することにより、ページおよびコントロールは、出力がレンダリングされる前に更新を実行できます。
- PreRenderComplete -PreRenderイベントはすべての子コントロールに対して再帰的に起動されるため、このイベントは事前レンダリングフェーズの完了を保証します。
- SaveStateComplete -ページの制御状態が保存されます。 パーソナライズ、制御状態、およびビュー状態の情報が保存されます。 HTMLマークアップが生成されます。 このステージは、Renderメソッドをオーバーライドするか、Page_Renderハンドラーを作成することで処理できます。
- UnLoad -UnLoadフェーズは、ページライフサイクルの最後のフェーズです。 すべてのコントロールのUnLoadイベントを再帰的に発生させ、最後にページ自体のイベントを発生させます。 最終的なクリーンアップが行われ、データベース接続などのすべてのリソースと参照が解放されます。 このイベントは、OnUnLoadメソッドを変更するか、Page_UnLoadハンドラーを作成することで処理できます。