- PR -

WEBカスタムコントロールのイベントの発生順序について

1
投稿者投稿内容
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 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
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2007-01-26 19:16
ゆっきーさん、こんばんは。

引用:

ポストバックでない初回表示のみページのPage_PreRender→CreateChildControlsの順序でイベントが発生します。ポストバック時はCreateChildControls→Page_PreRenderなのですが・・・。


取り敢えず、Page_PreRender メソッド内で EnsureChildControls() を呼んでみるとか。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-01-27 00:14
Page_PreRenderCompleteとかは?

何をどう組み立ててるかわからないので想像だけど、CreateChildControlsは
コントロールの組み立て方とかで呼ばれるタイミング違うような気もする。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-01-27 13:02
 ポストバックしたら、まずビューステートから“直前に表示したときの値”を再現しなければならないので、ページを構成する前にコントロールが生成されるのは、正しい挙動だと思う。


> どこでイベントが発生しているのかが分かりません。
 逆に、「どこで発生するか不定です」と、書いてあるように思う。


 あと、どのコントロールの、CreateChildControls なんだろう?
_________________
ゆっきー
ベテラン
会議室デビュー日: 2006/04/21
投稿数: 65
投稿日時: 2007-01-29 09:56
きくちゃんさん、どっとねっとふぁんさん、Jittaさん回答ありがとうございます。

きくちゃんさんの言われたとおり、Page_PreRenderメソッド内でEnsureChildControls()を読んでみたところうまく表示されるようになりました。

EnsureChildControlsで調べたところ、以下HPを見つけました。CreateChildControlsは、PreRenderの一番最後に呼ばれるようです。
http://www.dotnettaxi.com/ViewTopic110226.aspx
1

スキルアップ/キャリアアップ(JOB@IT)