コントロール実行の有効期間
サーバーは、要求されるたびに ASP.NET ページを読み込み、その要求が完了した時点でアンロードします。ページとページに含まれているサーバー コントロールが、要求の実行とクライアントに対する HTML の表示を行います。クライアントとサーバー間の通信状態が不明である場合や接続されていない場合でも、クライアントでは、プロセスが連続して実行されているように見える必要があります。
このような擬似的な連続性は、ASP.NET ページ フレームワークと、ページおよびそのコントロールによって実現されます。ポストバックされたとき、コントロールは、前回の Web 要求の終了時点から動作を再開したのと同様に動作する必要があります。ASP.NET ページ フレームワークにより、状態管理は比較的簡単になっていますが、外見的な連続性を実現するには、コントロール開発者はコントロールの実行順序を理解している必要があります。コントロール開発者は、コントロールの有効期間の各フェーズでコントロールがどの情報を利用できるか、どのデータが永続化されているか、およびコントロールを表示するときにコントロールがどのような状態かを理解している必要があります。たとえば、コントロールは、ページ上のコントロール ツリーに対する値設定が完了するまでは、その親を呼び出すことができません。
コントロールの有効期間の各フェーズの基本的な概要を次の表に示します。詳細については、表中に示すリンクをクリックしてください。
フェーズ | コントロールが行う処理 | オーバーライドするメソッドまたはイベント |
---|---|---|
初期化 | インカミング Web 要求の有効期間に必要な設定を初期化します。「継承したイベントの処理」を参照してください。 | Init イベント (OnInit メソッド) |
ビューステートの読み込み | 「コントロールの状態の維持」で説明するように、このフェーズの最後に、コントロールの ViewState プロパティに自動的に値が設定されます。コントロールは、LoadViewState メソッドの既定の実装をオーバーライドして、状態復元をカスタマイズできます。 | LoadViewState メソッド |
ポストバック データの処理 | インカミング フォーム データを処理し、それに合わせてプロパティを更新します。「ポストバック データの処理」を参照してください。
メモ このフェーズには、ポストバック データを処理するコントロールだけが参加します。 |
LoadPostData メソッド
(IPostBackDataHandler が実装されている場合) |
読み込み | データベース クエリの設定など、すべての要求に共通のアクションを実行します。この時点で、ツリー内にサーバー コントロールが作成および初期化され、状態が復元され、フォーム コントロールにクライアント側のデータが反映されます。「継承したイベントの処理」を参照してください。 | Load イベント
(OnLoad メソッド) |
ポストバック変更通知の送信 | 現在のポストバックと前回のポストバックの間の状態変更に応じて変更イベントを発生させます。「ポストバック データの処理」を参照してください。
メモ このフェーズには、ポストバック変更イベントを発生させるコントロールだけが参加します。 |
RaisePostDataChangedEvent メソッド
(IPostBackDataHandler が実装されている場合) |
ポストバック イベントの処理 | ポストバックを発生させたクライアント側イベントを処理し、サーバー上に適切なイベントを発生させます。「ポストバック イベントのキャプチャ」を参照してください。
メモ このフェーズには、ポストバック イベントを処理するコントロールだけが参加します。 |
RaisePostBackEvent メソッド
(IPostBackEventHandler が実装されている場合) |
プリレンダリング | 出力を表示する前に、すべての更新を実行します。プリレンダリング フェーズで行われたコントロールの状態の変更はすべて保存できますが、レンダリング フェーズで行われた変更は失われます。「継承したイベントの処理」を参照してください。 | PreRender イベント
(OnPreRender メソッド) |
状態の保存 | このステージの後、コントロールの ViewState プロパティが自動的に文字列オブジェクトとして永続化されます。この文字列オブジェクトは、クライアントに送信され、隠し変数として返されます。効率化を図るために、コントロールは SaveViewState メソッドをオーバーライドして、ViewState プロパティを変更できます。コントロールの状態の維持」を参照してください。 | SaveViewState メソッド |
レンダリング | クライアントに表示する出力を生成します。「ASP.NET サーバー コントロールのレンダリング」を参照してください。 | Render メソッド |
破棄 | コントロールが破棄される前に最終的なクリーンアップを実行します。データベース接続のように負荷の高いリソースの参照は、このフェーズで解放する必要があります。「ASP.NET サーバー コントロールのメソッド」を参照してください。 | Dispose メソッド |
アンロード | コントロールが破棄される前に最終的なクリーンアップを実行します。コントロール作成者は、通常、Dispose でクリーンアップを実行し、このイベントは処理しません。 | UnLoad イベント (OnUnLoad メソッド) |
**メモ ** EventName イベントをオーバーライドするには、OnEventName メソッドをオーバーライドし、基本クラスの OnEventName メソッドを呼び出します。
3 列目のメソッドおよびイベントは、原則として System.Web.UI.Control から継承されます。ただし、LoadPostData および RaisePostDataChangedEvent は IPostBackDataHandler インターフェイスのメソッドであり、RaisePostBackEvent は IPostBackEventHandler インターフェイスに属します。コントロールがポストバック データ処理に参加する場合は、IPostBackDataHandler を実装する必要があります。コントロールがポストバック イベントを受け取る場合は、IPostBackEventHandler を実装する必要があります。
CreateChildControls メソッドは、ASP.NET ページ フレームワークがコントロール ツリーを作成する必要があるときに呼び出されます。このメソッドの呼び出しはコントロールの有効期間の特定のフェーズには制限されていないため、このメソッドはこの表には含まれません。たとえば、ページの読み込み中、データ連結中、またはレンダリング中に、CreateChildControls を呼び出すことができます。
参照
ポストバック イベントのキャプチャ | ポストバック データの処理 | 継承したイベントの処理 | コントロールの状態の維持