1. ASP.NETサーバーコントロールのライフサイクルのリストを実行します。
一般的なサーバーコントロールのライフサイクルは、11回のステージで構成されています。
/// <まとめ> /// 1.初期化 /// </要約> /// <備考> /// 初期化1.主制御が終了し、その子へのページを順次、対応するメソッドを呼び出すことにより、再帰的に制御するのprocessRequest OnInit方法; /// 2.ページポストバックにViewStateに格納された値が正しく制御に復帰するように、TrackViewStateメソッドを呼び出すことにより、トラッキング制御ビュー状態を開きます。 /// </備考> 保護 オーバーライドは 無効のOnInit(のEventArgs E) { 書き込み(" 1のOnInit " ;) ベース.OnInit(E)を、 この .Page.RegisterRequiresPostBack(この); } /// <まとめ> // / 2.ロードビュー /// </要約> /// <備考> /// ページが返信される場合、この相は、実際には、ビューステートにはデータページが制御ビューステートをロードの完了に最初に実行、さらに、メイン処理中に存在しない、のみ行われ、 / // コントロールがビューステート、クライアントの要求処理を有効になっていることを提供し、ビューステートは、ページのポストバックイベントのポストバックを実行するかどうかをもう一度考えるために戻ってサーバに隠しフィールドに格納されています。 /// </備考> 保護 オーバーライドは 無効 LoadViewState(オブジェクトsavedState) { 書き込み(" 2. LoadViewState " ;) ベース.LoadViewState(savedState); } /// <まとめ> /// 3.データ戻り処理を @ / </要約> /// <PARAM NAME = "postDataKey"> ロードされたページコントロールのクライアントID、提出された</ param>の /// ます。<param name =「postCollection」> クライアントによって提出されたデータをロード</ param>の /// <備考> /// このフェーズでは、ページが返送された場合にのみ行われ、メイン制御データリターン機能が完了し、クライアントに合わせて提出新しい値とRaisePostDataChangedEvent方法かどうかをデータ比較の古い値 /// クライアントと修飾された形態のデータが送信され、離間の形で「&」であろうと検出IDに応じた制御が実現され、IDデータとそれを結びますIPostBackDataHandlerインターフェイスは、実現場合 /// その値の確率を更新するLoadPostDataメソッドを呼び出します。 /// </備考> 公共 BOOL LoadPostData(文字列postDataKey、postCollection NameValueCollectionの) { 書き込み(" 3. LoadPostData " ); 戻り trueに; } /// <要約> /// 。4。 </要約> /// <備考> /// 、主にビューステートに応じて制御クライアントデータを減らし、作成と初期化制御を完了させるために、制御の再帰的にPage_LoadイベントOnLoadイベント後、最初のページを実行し、 /// しばしばIsPostBackプロパティを通ってきますページ要求を分析して第一の制御または対応するコード・ロジック処理ポストバックイベントです。 /// </備考> 保護 オーバーライドは 無効読み込み時(のEventArgs E) { 書き込み(" 4.読み込み時の" ); ベース.OnLoad(E); } /// <まとめ> /// 5.戻りイベント通知は、 // / </要約> /// <備考> /// このフェーズは、ページがポストバックされた場合にのみ、この方法はまた、インターフェイスIPostBackDataHandlerの方法で行われLoadPostDataが真であるときにのみ、RaisePostDataChangedEventが呼び出されます。 /// </備考> 公共 ボイドRaisePostDataChangedEvent() { 書き込み(" 5. RaisePostDataChangedEvent " ); } /// <まとめ> /// 6.処理ポストバックイベント /// </要約> /// <備考> /// この段階のみページは主にクライアントポストバックイベントによって引き起こされる、ポストバックされたときに実行される、成功したクライアントポストバックイベントをキャプチャし、サーバー側で処理。前提条件はIPostBackEventHandlerインターフェイス達成することである /// トリガされる制御パラメータeventArgumentポストバックイベントに応じて判断をし、適切なイベント・ハンドラを完了します。 /// </備考> 公共 ボイド RaisePostBackEvent(文字列eventArgument) { 書き込み(" 6. RaisePostBackEvent " ); } /// <まとめ> /// 7.プリレンダリング /// </要約> /// <備考> /// 主制御の完了がレンダリングされる前にいくつかの操作、適切なリソースのような、制御を登録する:JavaScriptスクリプトおよびコントロール隠しフィールド等。 /// </備考> 保護 オーバーライドが 無効OnPreRender(のEventArgs E) { 書き込み(" 7 OnPreRenderを" ); ベース.OnPreRender(E); } /// <まとめ> /// 8.ビューステートを保存 /// </要約> /// <備考> /// LoadViewStateの反対側の、主記憶ページビューステータス情報を完了し、ページが最初の要求実行され、ページLoadViewStateポストバック場合にのみ実行されています。 /// </備考> オーバーライド オブジェクトSaveViewState() { 書き込み(" 8. SaveViewState " ); ベース.SaveViewStateを(); 戻り 新しい新しいペアを(); } /// <まとめ> /// 9本 /// </要約> /// <備考> /// クライアント上でレンダリングされたHTML形式のサーバーコントロールの出力ストリームに制御文字とテキスト出力、。コントロールの場合、この方法は、出力ストリームRenderControl呼び出すことができます。 /// </備考> 保護 オーバーライドが 無効レンダリング(たHtmlTextWriterライタ) { writer.Writeを("<INPUT TYPE = 'ボタンの' name = '{0}'値=スタイル= '位置:絶対;左:20ピクセル;トップ:280px' '私をクリックしてください!'のonclick = \ "{1} \" /> " 、 この .UniqueID、Page.ClientScript.GetPostBackEventReference(この、"" )); ライト(" 9.レンダリング" )、 ベース.render(ライター); } /// <まとめ> /// 10アン /// </要約> /// <備考> /// リソースのクリーンアップとコントロールを完了するためのメインページは、ページを離れるとき、トリガまたは2つの要求が連続して表示されるようにページのビューステートを頼っているのでときに、ブラウザを閉じるように同一視することはできません2つの要求の間でステートレスである。 /// </備考> 保護された オーバーライド ボイドONUNLOAD(EventArgsの電子) { 書き込み(" 10. ONUNLOAD " ); ベース.OnUnload(E); } /// <まとめ> /// 11リリース /// </要約> /// <備考> /// データベースなどのいくつかのリソースを解放しますIO接続やファイルストリーム。 /// </備考> 公共 オーバーライド 無効廃棄() { 書き込み(" 11.廃棄" )、 ベース.Disposeを(); } プライベート ボイド書き込み(文字列テキスト) { HttpContext.Current.Response.Write(テキスト + " < BR /> "); }
注意:ページをコンテナー・サーバーコントロールのこのタイプは、より洗練されたライフサイクルステージを持っているよう。各このような制御、唯一のInitイベント、および設定とテンプレートページを絞り込むために使用されるページのコントロールとプロパティPREINITのテーマなくなり、一度初期段階では、初期化、INITCOMPLETE三の段階、通常PREINIT段階については、変更は、初期段階は、順番にそれぞれの子コントロールを初期化し、名前付けコンテナを設定するためのInitイベントを呼び出します、および制御を可能にするINITCOMPLETE相は、ビューステート追跡機能を持っています。
2 設計モデルとASP.NETサーバーコントロールの動作モードの違いについて簡単に説明します。
デザインパターンは、開発者がすぐにコントロールのプロパティと動作を設定するための制御の効果を示すために、時間に見ることができるように、開発者向けに設計されていますが、特定のデザインモードのライフサイクル制御の場合には、そのようなOnPreRender、負荷として(実行されません。 CreateChildControlsのなど)、環境変数実行モードのコンテキストでのみ存在しますが、初期化、構築、レンダリング、のRenderContentsしない、廃棄および他のイベントは、デザインモードで実行されます。ファイルパスが望ましくないときに、いくつかのリソースファイルを紹介するOnPreRenderイベント(Javascriptを/ CSS /写真)として、IDEの設計状態の下で、それが現在の動作モードでの仮想サーバーのパスを取得する必要があります。サーバーコントロールのページPageLoadイベントのコンテキストで引用別の例は、また、例外エラー「の情報を得ることができない」報告します。
ID 3.簡単なサーバーコントロール、およびクライアントIDのUniqueIDとの違い。
IDは、我々はIDという一意に識別するためのID、一意IDとクライアントIDにより、各サーバーコントロールとして、一意IDがサーバIDで、クライアントIDは、クライアントIDで、通常ではない子コントロールとして、またはマスターページの下に制御し、その3つの制御this.UniqueID INamingContainerがインターフェイスを継承している場合、一意ID及びクライアントID親コントロールは、それぞれデリミタ異なるIDを追加する(と$ _)が同定され、正確に同じです。
ます。https://www.cnblogs.com/hmiinyu/p/3586065.htmlで再現