- - PR -
動的に追加したユーザーコントロールが消えてしまう
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-19 23:01
C#でASP.NETの開発を行っています。
Page_load()から呼ばれるメソッド(仮にaaa()とします)の中で、 パネルに対して、動的にユーザーコントロールを追加しています。 画面起動時はユーザーコントロールが表示されるのですが、 例えばボタンクリックなどでイベントが走ると、 PostBackの場合は、そのaaa()を呼ばないようにしているため、 追加したユーザーコントロールが消えてしまいます。 PostBackの処理が走っても、追加したユーザーコントロールが消えないように、 ユーザーコントロールを保持することはできるのでしょうか。 ------------------------------ private void Page_Load(object sender, System.EventArgs e){ if(!Page.IsPostBack){ aaa(); } } private void aaa(){ Control cl = Page.LoadControl("xxxxx.ascx"); Panel1.Controls.Add(cl): } ------------------------------ | ||||||||||||||||
|
投稿日時: 2005-01-20 01:58
消えたのではなく追加されなかったのです。PostBackされた時は、新たにサーバー
コードが実行されるのですから。 で、普通にaspxファイルにタグ書くのはだめですか? http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbtskaddingusercontrolstowebformspage.asp Page_Loadで追加している理由はわかりませんが、if(Page.IsPostBack)の時もaaa(); すれば一応追加されます。そもそも、ユーザーコントロールでない普通のコントロール の場合は動的に追加しても「保持」することができたのでしょうか。 | ||||||||||||||||
|
投稿日時: 2005-01-20 09:30
べるさん、レスありがとうございます。
消えたのではなく、追加されなかったのですね。 別の方法を考えたいと思います。 > で、普通にaspxファイルにタグ書くのはだめですか? 今は、画面起動時に定義情報を読込んで、その情報を元に検索の入力項目を 動的に表示する、という検索画面を作成しています。 #その検索の入力項目(テキストボックス、ドロップダウンなど)を #ユーザーコントロールで作成しています。 過去の場合、ポストバックに関係なく、aaa()を実行していたので、 問題なく表示されていました。 ですが、今は、画面起動時に動的に項目を表示するだけでなく、 画面内の切替ボタンでも、動的に項目を変更しようとしています。 そのときに、ViewState絡みとは思うのですが、 意図しない項目に値が表示されたりなど、挙動がおかしい部分があったので、 ユーザーコントロールを保持できたらいいのになと思っていたのでした。 それから、ボタンコントロールで試してみたところ、 動的に追加することはできましたが、保持することはできませんでした。 | ||||||||||||||||
|
投稿日時: 2005-01-20 22:07
ViewStateの読み込みは、Page.Loadイベントハンドラより前に行われます。フォーム上に表示するコントロールは、Page.Initイベントハンドラで追加しておくべきです。
# MSのサンプルは、そうなっています。 Page_Loadメソッドにある「ページを初期化するユーザコード」の"初期"の状態は、Windowsアプリケーションで言うところの「イベントが発生する直前」の状態と解釈しましょう。Windowsアプリケーションではその状態を"維持"してくれていますが、Webアプリケーションでは、リクエストが発生するごとにその状態を"再現"してやらなければなりません。この再現された状態を作ることが、Page_Loadメソッドに書いてある「初期化する」の意味です。表示されるオブジェクトを作成する意味での初期化は、初期化イベントがあるのですから、そこで行うべきです。 _________________ | ||||||||||||||||
|
投稿日時: 2005-01-20 22:07
#あら、ほぼ同時刻にJittaさんの詳しい説明が^^ [ メッセージ編集済み 編集者: べる 編集日時 2005-01-21 01:40 ] |
1