- - PR -
ユーザコントロールの値の反映
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-15 20:55
いつも参考にさせていただいています。.net2005でWebアプリの開発をしています。
テキストボックスなど複数のコントロールを持つユーザコントロールを動的に作成してページの表示を行いたいと思っています。ユーザが削除、追加ボタン押下のタイミングでそのユーザコントロールを動的に追加、削除させます。 そこで親ページでユーザコントロールをSortedList型のプロパティにして、Sessionに保持、そこへ追加、削除を行います。 ところが問題は、実際にユーザコントロール上のテキストボックスに値を入れてページ上は変更がされていても値をとってみると初期値(ユーザコントロールを作成したとき)のままなのです。つまりTextbox1.Textで値を見ても入力値が反映されていないのです。 Postbackしてこのユーザコントロールを再表示させるときにはちゃんと値がはいっているのに。。。 そもそもSessionオブジェクトに入れるのが間違っているのでしょうか?あるタイミングで入力された値を反映させるにはどうしたらよいのでしょうか。ご指導お願いいたします。 -------------------------------------------------------------------------- Private Property UserControl() As SortedList Get If (Session("UserControl") Is Nothing) Then Dim tmpSL As SortedList = New SortedList tmpSL.Add(0, Me.ucDetail) Session("UserControl") = tmpSL End If Return CType(Session("UserControl"), SortedList) End Get Set(ByVal value As SortedList) Session("UserControl") = value End Set End Property | ||||
|
投稿日時: 2007-08-17 11:35
Webフォーム(Pageクラス)とWebフォームに貼り付けられているコントロールのインスタンスは、クライアントから要求が来たときにサーバーのメモリ上に生成され、クライアントにHTML等を書き出して接続が切れるとその役目を終えてガベージコレクションの対象になります。(通常は)
つまり、セッションオブジェクトとして保持しているユーザーコントロールは、次の要求時には、既に役目を終えた残りカスでしかありません。その回の要求に応じたユーザーコントロールは別に出来ているはずです。ですので、
そういうことになります。 あと、カタカナを半角と全角混ぜているのは何か理由があるんですか? いにしえのプログラマー達の亡霊による呪いか何かですか。 | ||||
|
投稿日時: 2007-08-17 19:01
一郎様
ありがとうございます。すると動的に作成するユーザコントロールの場合、Postback後も同じ状態になるようにするにはどのように保持したらいいんでしょうか。。。 半角、全角混じってすみません。投稿時あわてていたもので統一するのを怠りました。。。 |
1