2009-10-30 15 views
9

Webパーツのライフサイクルは、このようなdescribedです:ページの負荷にポストバック時にOnLoad/CreateChildControlsの順序が変わるのはなぜですか?

  1. コンストラクタ
  2. のOnInit
  3. のOnLoad
  4. Webパーツが接続可能である場合
  5. は、ConnectionConsumerメソッドが呼び出され
  6. CreateChildControls ...
  7. 第一ポストバックで210

(ポストバッククリック ハンドラは、公衆 プロパティを経由してのViewStateを設定します)

  1. コンストラクタ
  2. のOnInit
  3. CreateChildControlsの
  4. のOnLoad
  5. ポストバッククリック取り扱い...
第二ポストバックで

  1. コンストラクタ
  2. のOnInit
  3. LoadViewState
  4. CreateChildControlsの
  5. のOnLoad ...(ポストバッククリック ハンドラは、公衆 プロパティ経由のViewStateを設定します)

あなたがOnLoadとCreateChildControlsが順序を変更するのを見てください。これは、私がOnLoad要素でやったいろいろなデータを集める必要があるので、私のコードにいくつかの困難をもたらします。

ポストバックフェーズで注文が変更される理由はありますか?

答えて

14

CreateChildControlsは、フレームワーク(または自分自身)がEnsureChildControlsメソッドを呼び出すたびに呼び出されます。このメソッドは、子コントロールが必要なときはいつでも呼び出される必要があります。

フレームワークの場合、OnInitとOnLoadの間に投稿された値を設定したいので(OnLoadの間に値にアクセスできるようにします)。これを行うためのコントロールが必要なので、EnsureChildControlsを呼び出します。

ポストバックがない場合、値を設定する必要もないため、EnsureChildControlsの呼び出しは、フレームワークにコントロールが必要になるまで待機します。これは、OnLoadとOnPreRenderの間に起こります。

+0

それは良い答えです。 – spa

-4

これは起こりません。本当に確実ですか?注文が変更されたように見えるかもしれない他のスレッドは実行されていませんか?

これは結局のところ、コンピュータによって実行されるプログラム(すべての人とは違って、常に同じものを実行すべきであることを意味する)ASP.NETです。

+0

はい私は確信しています。:-( – spa

+0

これは私が思いついたものではありません。さまざまなブログの投稿に記載されています(質問のリンクを参照してください) – spa

関連する問題