- PR -

ユーザコントロールの値の反映

1
投稿者投稿内容
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 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
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-08-17 11:35
Webフォーム(Pageクラス)とWebフォームに貼り付けられているコントロールのインスタンスは、クライアントから要求が来たときにサーバーのメモリ上に生成され、クライアントにHTML等を書き出して接続が切れるとその役目を終えてガベージコレクションの対象になります。(通常は)
つまり、セッションオブジェクトとして保持しているユーザーコントロールは、次の要求時には、既に役目を終えた残りカスでしかありません。その回の要求に応じたユーザーコントロールは別に出来ているはずです。ですので、
引用:

けいさんの書き込み (2007-08-15 20:55) より:
そもそもSessionオブジェクトに入れるのが間違っているのでしょうか?


そういうことになります。

あと、カタカナを半角と全角混ぜているのは何か理由があるんですか?
いにしえのプログラマー達の亡霊による呪いか何かですか。
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-17 19:01
一郎様
ありがとうございます。すると動的に作成するユーザコントロールの場合、Postback後も同じ状態になるようにするにはどのように保持したらいいんでしょうか。。。
半角、全角混じってすみません。投稿時あわてていたもので統一するのを怠りました。。。
1

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