ASP.NETページイベント:順序と返信の詳細
4884 ワード
要旨:本文はASPを紹介した.NETページのイベントの順序と返信、具体的には初期化、復元とロード、イベント処理と保存と表示が含まれています.参考にしてください.
一、初期化
ページがコミットされると、最初のメソッドは常にコンストラクション関数です.コンストラクション関数でカスタム属性やオブジェクトを初期化できますが、ページが完全に初期化されていないため、多少の制限があります.特に、HttpContextオブジェクトを使用する必要があります.現在使用可能なオブジェクトには、QueryString、Form、Cookiesのセット、Cacheオブジェクトが含まれます.注意:コンストラクション関数ではSessionは使用できません.
次に実行する方法は、AddParsedSubObjectメソッドです.このメソッドでは、すべての独立したコントロールを追加し、ページをコントロールセットツリーに構成します.このメソッドは、ページテンプレートソリューション(Page Template Solutions)によってよく書き換えられ、ページコンテンツをページテンプレート(Page Template)の特殊なコントロールに追加します.この方法はすべてのページコントロールと対応する各サブコントロールに再帰的に適用され、すべてのコントロールはこの方法で最初の初期化を開始します.
ページクラスの次の方法は、DeterminePostBackModeです.この方法では、IsPostBackの値と関連するイベントを変更できます.データベースからViewStateをロードする必要がある場合、この方法は特に便利です.なぜなら、ViewStateはIsPostBackが本物の場合にのみリカバリされるからです.空を返すと、非再送が強制的に実行され、Requestが戻る.Formは強制的に返信を実行します.特別な場合を除き、これは他のイベントにも影響を与えるため、これを操作することをお勧めしません.
次に実行するメソッドはOnInitメソッドで、一般的にはこれが最初に本当に使用されるメソッドです.このメソッドがトリガーされると、すべてのページ定義のコントロールが初期化されます.これは、ページで定義されたすべての値が対応するコントロールに適用されることを意味します.ただし、ViewStateと返信された値はコントロールに適用されないため、コードまたはユーザーによって変更された値はコントロールに復元されていません.この方法は通常、ダイナミックコントロールを作成し、再作成するのに最適な場所です.
二、回復とロード
次の方法では、LoadPageStateFromPersistenceMediumは、ページが返信されたときにのみ実行されます.Sessionまたはカスタムストレージ方式を使用しているため、後述するViewState保存方式に影響を与える方法SavePageStateToPersistenceMediumを変更した場合は、この方法を書き換える必要があります.デフォルトのインプリメンテーションでは、ViewStateはBase 64形式で符号化され、ページの非表示ドメインに保存されます.この文書で説明した方法で、ViewStateを変更して上記の2つの方法で保存することができます.注意:この方法では、ページまたはページコントロールにView Stateが実際にロードされていません.
ViewStateが取得されると、次のメソッドLoadViewSateは、ページおよび各ページコントロールまたはサブコントロールにViewStateを再帰的に復元します.このメソッドが実行されると、各コントロールは前回の状態に戻りますが、ViewStateの一部ではないため、ユーザーがコミットしたデータはコントロールに適用されません.この方法は、他のイベントで動的に生成されたコントロールの値を復元するために主に使用されます.値は、手動でViewSateに保存され、現在は失効しています.
次の方法はProcessPostDataであり,この方法も同様に再送時に実行され,書き換えは許されない,ページベースクラスのプライベートメソッドである.この方法は、コントロールの名前を一致させることによって、対応するユーザーがコミットしたコントロールの値を復元します.これは、ページ全体が完全に復元されていることを意味します.唯一覚えておきたいのは、すべてのダイナミックコントロールの作成はこの方法の前にしなければならないことです.この方法も後の変更イベントを記録する方法です.
次の方法はOnLoadメソッドで、通常はページ生存期間がすべての値を回復した最初の場所であるため、最も多くの方法が使われています.ほとんどのコードは、IsPostBackを判断することによって、コントロールの状態を再設定するかどうかを決定します.このメソッドでValidateを呼び出し、IsValidの値を確認することもできます.この方法では、動的コントロールを作成することもでき、現在のページのステータスに追いつくために、コントロールのすべての方法が実行されます.ViewSateは含まれますが、返信の値は含まれません.
三、事件処理
次のメソッドはProcessPostDataであり、実際には前のメソッドの別の呼び出しであり、再送時にのみ実行され、プライベートメソッドであるため書き換えられない.ページの実行軌跡を初めて見ると、この方法は余計だと思うかもしれません.しかし、実際には、OnLoadで作成されたダイナミックコントロールにもリターンの値が必要であるため、この方法が必要です.その後作成されたコントロールは、ViewStateを取得できますが、返信された値を取得することはできません.値変更イベント(Change Event)はトリガーされません.
次の方法、RaiseChangedEventsも、返信ページでのみ実行され、ベースクラスのプライベートメソッドであるためすべて継承できません.ページ生存期間全体において、ここでは、前のProcessPostDataで記録されたコントロールの値とコミットされた値が異なるかによって、値変更イベントがトリガーされます.Validateを呼び出すか、IsValidの値を確認する必要があるかもしれません.ここでは、複数の値がイベントの実行順序を変更することを特に説明していない.
次のメソッド,RaisePostBackEventは,同様にベースクラスであるためプライベートメソッドは継承できず,同様にエコーページのみで実行される.AutoPostBackを使用しない限り、フォームイベントを実際にコミットする場所、特にボタンやjavascriptを使用してフォームをコミットする場所などです.手動で呼び出されていない場合、検証コントロールが使用されている場合、Validateが呼び出されます.注意IEにバグがある場合、コミットは許可されますが、イベントはトリガーされません.
次の方法はOnPreRendererです.一般的には、クライアントがページを表示する前にページとそのコントロールを変更する最後の機会です.また、このメソッドでダイナミックコントロールを作成することもできます.すべてのメソッドは、現在のページに追いつくように実行されます.ViewSateも含まれますが、プライベートメソッドは実行されません.これは、返信された値がなく、イベントがトリガーされないことを意味します.IEのバグのため、PostBackにイベントが追いつかない良い場所です.
四、保存と表示
次の方法はSaveView Stateです.返信ページかどうかにかかわらず、ページとそのすべてのコントロールのView Stateを保存するために再帰的に実行されます.ViewStateは、基本的にaspxで定義された元の値とは異なるすべての値を保存します.コードによってもユーザーによっても変更されます.注意:コントロール値は、ページのコントロールツリー内の位置に基づいて保存されるため、ダイナミックコントロールが誤った位置に追加されると混乱します.
次の方法は、SavePageStateToPersistenceMediumの本格的なページを保存するViewSateです.この方法は、非表示ドメインではなく、LoadPageStateFromPersistenceMediumgとともに書き換えられ、ViewStateをSessionまたは他のカスタムデータに保存します.これは、低帯域幅のユーザーにとって非常に役立ちます.また、モバイルデバイスの場合、セッションはデフォルト設定です.次の記事では、上記の2つの方法でViewStateを保存する具体的な詳細について説明します.注意Asp.インターネットにBug:Aspがあります.Net要求は必ず提出しなければならない_viewstateフィールドは、空でもかまいません.
次の方法は、対応するコントロールのhtmlをブラウザに再帰的に作成して送信するRenderメソッドです.この方法は、サーバコントロールを使用するのではなく、汎用的なページヘッダと足を追加するために、いくつかのページテンプレートスキームに書き換えられています.彼らはいつも追加のものを持っています.ここでの修正は、コントロールが生成されているため、純粋なHTMLしか使用できません.StringBuilder、StringWriter、HtmlTextWriterを使用して、対応するHTML出力をキャプチャできます.
最後の方法はOnUnloadで、対応するDisposeメソッドが呼び出されます.この方法は、開いているファイルハンドルを閉じる、以前開いていたデータベース接続など、ページで使用されていた非管理リソースを空にする機会を提供します.この方法は、ページがクライアントに送信された後に実行されるため、サーバオブジェクトに影響を与えるだけで、ページの表示軌跡には表示されません.これがページの生存期間であり,要求ごとにこのように実行される.
表1:ページイベントのまとめ
メソッドコールバックコントロール
一、初期化
ページがコミットされると、最初のメソッドは常にコンストラクション関数です.コンストラクション関数でカスタム属性やオブジェクトを初期化できますが、ページが完全に初期化されていないため、多少の制限があります.特に、HttpContextオブジェクトを使用する必要があります.現在使用可能なオブジェクトには、QueryString、Form、Cookiesのセット、Cacheオブジェクトが含まれます.注意:コンストラクション関数ではSessionは使用できません.
次に実行する方法は、AddParsedSubObjectメソッドです.このメソッドでは、すべての独立したコントロールを追加し、ページをコントロールセットツリーに構成します.このメソッドは、ページテンプレートソリューション(Page Template Solutions)によってよく書き換えられ、ページコンテンツをページテンプレート(Page Template)の特殊なコントロールに追加します.この方法はすべてのページコントロールと対応する各サブコントロールに再帰的に適用され、すべてのコントロールはこの方法で最初の初期化を開始します.
ページクラスの次の方法は、DeterminePostBackModeです.この方法では、IsPostBackの値と関連するイベントを変更できます.データベースからViewStateをロードする必要がある場合、この方法は特に便利です.なぜなら、ViewStateはIsPostBackが本物の場合にのみリカバリされるからです.空を返すと、非再送が強制的に実行され、Requestが戻る.Formは強制的に返信を実行します.特別な場合を除き、これは他のイベントにも影響を与えるため、これを操作することをお勧めしません.
次に実行するメソッドはOnInitメソッドで、一般的にはこれが最初に本当に使用されるメソッドです.このメソッドがトリガーされると、すべてのページ定義のコントロールが初期化されます.これは、ページで定義されたすべての値が対応するコントロールに適用されることを意味します.ただし、ViewStateと返信された値はコントロールに適用されないため、コードまたはユーザーによって変更された値はコントロールに復元されていません.この方法は通常、ダイナミックコントロールを作成し、再作成するのに最適な場所です.
二、回復とロード
次の方法では、LoadPageStateFromPersistenceMediumは、ページが返信されたときにのみ実行されます.Sessionまたはカスタムストレージ方式を使用しているため、後述するViewState保存方式に影響を与える方法SavePageStateToPersistenceMediumを変更した場合は、この方法を書き換える必要があります.デフォルトのインプリメンテーションでは、ViewStateはBase 64形式で符号化され、ページの非表示ドメインに保存されます.この文書で説明した方法で、ViewStateを変更して上記の2つの方法で保存することができます.注意:この方法では、ページまたはページコントロールにView Stateが実際にロードされていません.
ViewStateが取得されると、次のメソッドLoadViewSateは、ページおよび各ページコントロールまたはサブコントロールにViewStateを再帰的に復元します.このメソッドが実行されると、各コントロールは前回の状態に戻りますが、ViewStateの一部ではないため、ユーザーがコミットしたデータはコントロールに適用されません.この方法は、他のイベントで動的に生成されたコントロールの値を復元するために主に使用されます.値は、手動でViewSateに保存され、現在は失効しています.
次の方法はProcessPostDataであり,この方法も同様に再送時に実行され,書き換えは許されない,ページベースクラスのプライベートメソッドである.この方法は、コントロールの名前を一致させることによって、対応するユーザーがコミットしたコントロールの値を復元します.これは、ページ全体が完全に復元されていることを意味します.唯一覚えておきたいのは、すべてのダイナミックコントロールの作成はこの方法の前にしなければならないことです.この方法も後の変更イベントを記録する方法です.
次の方法はOnLoadメソッドで、通常はページ生存期間がすべての値を回復した最初の場所であるため、最も多くの方法が使われています.ほとんどのコードは、IsPostBackを判断することによって、コントロールの状態を再設定するかどうかを決定します.このメソッドでValidateを呼び出し、IsValidの値を確認することもできます.この方法では、動的コントロールを作成することもでき、現在のページのステータスに追いつくために、コントロールのすべての方法が実行されます.ViewSateは含まれますが、返信の値は含まれません.
三、事件処理
次のメソッドはProcessPostDataであり、実際には前のメソッドの別の呼び出しであり、再送時にのみ実行され、プライベートメソッドであるため書き換えられない.ページの実行軌跡を初めて見ると、この方法は余計だと思うかもしれません.しかし、実際には、OnLoadで作成されたダイナミックコントロールにもリターンの値が必要であるため、この方法が必要です.その後作成されたコントロールは、ViewStateを取得できますが、返信された値を取得することはできません.値変更イベント(Change Event)はトリガーされません.
次の方法、RaiseChangedEventsも、返信ページでのみ実行され、ベースクラスのプライベートメソッドであるためすべて継承できません.ページ生存期間全体において、ここでは、前のProcessPostDataで記録されたコントロールの値とコミットされた値が異なるかによって、値変更イベントがトリガーされます.Validateを呼び出すか、IsValidの値を確認する必要があるかもしれません.ここでは、複数の値がイベントの実行順序を変更することを特に説明していない.
次のメソッド,RaisePostBackEventは,同様にベースクラスであるためプライベートメソッドは継承できず,同様にエコーページのみで実行される.AutoPostBackを使用しない限り、フォームイベントを実際にコミットする場所、特にボタンやjavascriptを使用してフォームをコミットする場所などです.手動で呼び出されていない場合、検証コントロールが使用されている場合、Validateが呼び出されます.注意IEにバグがある場合、コミットは許可されますが、イベントはトリガーされません.
次の方法はOnPreRendererです.一般的には、クライアントがページを表示する前にページとそのコントロールを変更する最後の機会です.また、このメソッドでダイナミックコントロールを作成することもできます.すべてのメソッドは、現在のページに追いつくように実行されます.ViewSateも含まれますが、プライベートメソッドは実行されません.これは、返信された値がなく、イベントがトリガーされないことを意味します.IEのバグのため、PostBackにイベントが追いつかない良い場所です.
四、保存と表示
次の方法はSaveView Stateです.返信ページかどうかにかかわらず、ページとそのすべてのコントロールのView Stateを保存するために再帰的に実行されます.ViewStateは、基本的にaspxで定義された元の値とは異なるすべての値を保存します.コードによってもユーザーによっても変更されます.注意:コントロール値は、ページのコントロールツリー内の位置に基づいて保存されるため、ダイナミックコントロールが誤った位置に追加されると混乱します.
次の方法は、SavePageStateToPersistenceMediumの本格的なページを保存するViewSateです.この方法は、非表示ドメインではなく、LoadPageStateFromPersistenceMediumgとともに書き換えられ、ViewStateをSessionまたは他のカスタムデータに保存します.これは、低帯域幅のユーザーにとって非常に役立ちます.また、モバイルデバイスの場合、セッションはデフォルト設定です.次の記事では、上記の2つの方法でViewStateを保存する具体的な詳細について説明します.注意Asp.インターネットにBug:Aspがあります.Net要求は必ず提出しなければならない_viewstateフィールドは、空でもかまいません.
次の方法は、対応するコントロールのhtmlをブラウザに再帰的に作成して送信するRenderメソッドです.この方法は、サーバコントロールを使用するのではなく、汎用的なページヘッダと足を追加するために、いくつかのページテンプレートスキームに書き換えられています.彼らはいつも追加のものを持っています.ここでの修正は、コントロールが生成されているため、純粋なHTMLしか使用できません.StringBuilder、StringWriter、HtmlTextWriterを使用して、対応するHTML出力をキャプチャできます.
最後の方法はOnUnloadで、対応するDisposeメソッドが呼び出されます.この方法は、開いているファイルハンドルを閉じる、以前開いていたデータベース接続など、ページで使用されていた非管理リソースを空にする機会を提供します.この方法は、ページがクライアントに送信された後に実行されるため、サーバオブジェクトに影響を与えるだけで、ページの表示軌跡には表示されません.これがページの生存期間であり,要求ごとにこのように実行される.
表1:ページイベントのまとめ
メソッドコールバックコントロール
ConstructorAlwaysAll
AddParsedSubObjectAlwaysAll
DeterminePostBackModeAlwaysPage
OnInitAlwaysAll
LoadPageStateFromPersistenceMediumPostBackPage
LoadViewStatePostBackAll
ProcessPostData1PostBackPage
OnLoadAlwaysAll
ProcessPostData2PostBackPage
RaiseChangedEventsPostBackPage
RaisePostBackEventPostBackPage
OnPreRenderAlwaysAll
SaveViewStateAlwaysAll
SavePageStateToPersistenceMediumAlwaysPage
RenderAlwaysAll
OnUnloadAlwaysAll