- PR -

[ASP.NET]コントロールのPostBackの動きが・・・

1
投稿者投稿内容
ちづる
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 72
投稿日時: 2004-08-05 17:51
今Webアプリにて画面を作成しています。
画面上にチェックボックスとテキストボックスがそれぞれ2つあり、チェックボックスには両方ともプロパティにてautpostbackを有効にしてます。
動作としては

1のチェックボックスにチェックをいれたら、1のテキストボックスが有効
2のチェックボックスにチェックをいれたら、2のテキストボックスが有効

というものです。
ところが、
1のチェック後、1のテキストボックスに文字を入れ、2のチェックを入れると、
1のテキストボックスの中身がクリアされてしまうのです。
逆パターンのチェックをはずしても、同様に片方のテキストボックスがクリアされてしまいます。
動き的には(1のチェック→1のテキスト入力→2のチェック→1のテキストは保持したまま)という風に行いたい場合、どのようにすればよいでしょうか?
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-08-05 19:14
う〜ん、普通にWebフォームコントロール貼り付けただけならば、ビューステートによって値は保持されるはずですけどねぇ。なんだろ。

考えられることとしては、
・テキストボックスのEnableViewStateプロパティがFalseに設定されている
 (同じようにページ自体のEnableViewStateも。。。)
・ページの初期処理(Page_Load等)で、テキストボックスの内容をクリアしてしまっている

それ以外の対処方法としては、AutoPostBackはやめて、クライアントスクリプトでテキストボックスの入力可/不可を切り替えるかな。
(どっちかっていうと、このくらいの処理ならばサーバーラウンドトリップが発生しないこちらの方法をすすめますが)
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-08-05 19:40
TextBoxのText等は、値の保持にビューステートを使ってませんよ。

http://support.microsoft.com/default.aspx?scid=kb;ja;316813

なので、設定とかではなくてご自分でクリアしているのでは?

>同様に片方のテキストボックスがクリアされてしまいます。
片方のというのが、解決の糸口になりますね。
ふたつのテキストボックスの違う所や、違う扱いをしているコードの部分を注意深く見てみてください。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-08-05 20:41
>TextBoxのText等は、値の保持にビューステートを使ってませんよ。

おお。ビューステートで保持されるのはGet/Postで送信されない属性だけだったんですね。知りませんでした。
試してみたところ確かにEnableViewStateの設定と関係なく保持されてました。
(ただ、EnableViewState=falseで、かつEnabled=false(HTML上でdisabled=true)になっていると保持されない。。。これも仕様?)

スレの本題と関係ないですが、勉強になりました(^^)/
ZEBRA
常連さん
会議室デビュー日: 2003/04/14
投稿数: 38
投稿日時: 2004-08-06 00:33
TextBoxに対して、DataBind()を実行していませんか?
DataBind()を実行すると、それに関連するデータがコントロールに反映してしまいます。それによって、テキスト内容がクリアされることがあります。

DataBind()に心当たりがないのであれば、多分使っていないかも…^^

[ メッセージ編集済み 編集者: ZEBRA 編集日時 2004-08-06 00:34 ]
ちづる
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 72
投稿日時: 2004-08-06 11:47
コントロールのプロパティもページのプロパティもEnableViewStateはTrueになっており、
又page_loadイベントも
If Not IsPostBack Then
(初期処理)
End If
とやっている為、クリア処理は走っていません。
ただ
http://www.microsoft.com/japan/msdn/thisweek/10lines/viewstate_vb.asp

ここを見る限り、コードによって ViewState の操作を行う方法をとったらどうなるのだろう?
と思い、
チェックのイベント時に片方のテキストボックスのEnableViewStateをtrueにしてやったら、
上手く保持されたままになりました。

ViewStateを知らなかったので、大変勉強になりました。
皆様ありがとうございました。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-08-06 13:13
先に提示したように、TextBoxのTextプロパティの値はViewStateを使っておりません。
ですので、EnableViewStateは関係ありません。
何か他の部分も変更しませんでしたか?
ソースの「テキストボックスのEnableViewStateをtrue」にしている部分を消してみると、Textが保持されなくなりますか?なりませんよね。

引用:

ちづるさんの書き込み (2004-08-06 11:47) より:
コントロールのプロパティもページのプロパティもEnableViewStateはTrueになっており、・・・

コードによって ViewState の操作を行う方法をとったらどうなるのだろう?と思い、チェックのイベント時に片方のテキストボックスのEnableViewStateをtrueに・・・


元々TrueのものをTrueに設定してやっても動作が変わるとは思えませんし。
1

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