- PR -

[ASP.NET] 調査後:WebUserControlのPage_Init等が二回走る。

1
投稿者投稿内容
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-08-06 15:16
前回はご意見いただきありがとうございました。
あれから調査しまして、下記のことが分かりました。

Global.TextというString型のバッファをデバッグに使用しています。

Public Class WUC1
Private Sub Page_Init
Global.Text = Global.Text & " WUC_Init "
End Sub
Private Sub Page_Load
Global.Text = Global.Text & " WUC_Load "
End Sub
End Class

Public Class Form1
Private Sub Page_Load
Global.Text = Global.Text & " Form1_Load "
Global.Text = Global.Text & " Debug1 "
Dim wuc11 as WUC
Global.Text = Global.Text & " Debug2 "
wuc11 = New WUC
Global.Text = Global.Text & " Debug3 "
Me.Controls.Add(wuc11)
Global.Text = Global.Text & " Debug4 "
End Sub

のようなプログラムを作成した際、出力されるGlobal.Textが
「 Form1_Load Debug1 Debug2 Debug3 WUC_Init WUC_Init Debug4 WUC_Load WUC_Load」
と動いてしまいます。
いろいろ調査しましたが、原因がわかりませんでした。
ご教授願います。

上記プログラムと実際のプログラムの相違点を大まかにいくつか。
1.実際はTableCellのControls.Addにてオブジェクトを登録している。
2.WebUserControl内にて、Button、List等を作成描画している。
3.親Formで取得、作成したDataSetを子(WebUserControl)に渡している。
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-08-07 16:20
追加です。
WebUserControlのNewは、一度しか走っていないようですので、オブジェクトが2個作成されているわけではなさそうですが。
内部で2回走らされているのでしょうか・・・
Ten.
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 67
投稿日時: 2004-08-09 11:51
こんにちは

あくまでも推測なのですが、Webユーザコントロールを動的にロードするには LoadControl メソッドを使用する必要があるのではないでしょうか?

WebユーザコントロールもWebフォームと同様に、ascx(Webフォームならaspx)とコードビハインドのクラスを元にし、実行時にASP.NETランタイムにより実際に実行されるクラスが生成されるものなので、コードビハインドのクラスだけでインスタンスを生成しても意味をなさないと思います。
(ロジックだけでUIが全くなければ動くかもしれませんが、そんなのWebユーザコントロールにする必要がないでしょうし・・・)
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-08-09 16:43
なるほど!
コードビハインドのクラスだけでインスタンスが生成されれば..
ascxでAutoEventWireup=falseとしても効かず、デフォルトのAutoEventWireup=trueが設定される。
AutoEventWireupにより自動的にPage_Loadが発生する。
自動生成されるコードの
this.Load += new System.EventHandler(this.Page_Load);
と合わせてPage_Loadが2回発生する。
華月
常連さん
会議室デビュー日: 2004/05/19
投稿数: 41
お住まい・勤務地: みちのく
投稿日時: 2004-08-09 18:41
こんにちは。

まさしくそのとおりでした。
LoadControlを使うのが普通だったのですね・・・
Page_Init,Page_Load共に一回ずつになりました。
今、その関数等を調べています。
todoさんのおっしゃっていることを理解できるよう調査中であります。
1

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