- - PR -
WEBカスタムコントロールのイベントの発生順序について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-26 18:47
vb.netでDBから動的にコントロールを作成するWEBカスタムコントロールの作成を行っています。
CreateChildControlsメソッドを使ってコントロールを作っているのですが、ポストバックでない初回表示のみページのPage_PreRender→CreateChildControlsの順序でイベントが発生します。ポストバック時はCreateChildControls→Page_PreRenderなのですが・・・。 やりたいことは、カスタムコントロールの中にある動的に作成したパネルの表示をボタンで切り替えることで、初回表示のみPage_PreRenderでは設定できずに困っています。CreateChildControlsでコントロールをVisible=Falseにしてしまうとコントロールの値が保持されません。 MSDNの「コントロールの有効期限」も読んでみたのですが、「CreateChildControls メソッドは、ASP.NET ページ フレームワークがコントロール ツリーを作成する必要があるときに呼び出されます」と記述があるだけで、どこでイベントが発生しているのかが分かりません。 表示を切り替えるよい方法があれば、アドバイスよろしくお願いします。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconcontrolexecutionlifecycle.asp | ||||
|
投稿日時: 2007-01-26 19:16
ゆっきーさん、こんばんは。
取り敢えず、Page_PreRender メソッド内で EnsureChildControls() を呼んでみるとか。 | ||||
|
投稿日時: 2007-01-27 00:14
Page_PreRenderCompleteとかは?
何をどう組み立ててるかわからないので想像だけど、CreateChildControlsは コントロールの組み立て方とかで呼ばれるタイミング違うような気もする。 | ||||
|
投稿日時: 2007-01-27 13:02
ポストバックしたら、まずビューステートから“直前に表示したときの値”を再現しなければならないので、ページを構成する前にコントロールが生成されるのは、正しい挙動だと思う。
> どこでイベントが発生しているのかが分かりません。 逆に、「どこで発生するか不定です」と、書いてあるように思う。 あと、どのコントロールの、CreateChildControls なんだろう? _________________ | ||||
|
投稿日時: 2007-01-29 09:56
きくちゃんさん、どっとねっとふぁんさん、Jittaさん回答ありがとうございます。
きくちゃんさんの言われたとおり、Page_PreRenderメソッド内でEnsureChildControls()を読んでみたところうまく表示されるようになりました。 EnsureChildControlsで調べたところ、以下HPを見つけました。CreateChildControlsは、PreRenderの一番最後に呼ばれるようです。 http://www.dotnettaxi.com/ViewTopic110226.aspx |
1