- - PR -
[ASP.NET]コントロールのPostBackの動きが・・・
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-05 17:51
今Webアプリにて画面を作成しています。
画面上にチェックボックスとテキストボックスがそれぞれ2つあり、チェックボックスには両方ともプロパティにてautpostbackを有効にしてます。 動作としては 1のチェックボックスにチェックをいれたら、1のテキストボックスが有効 2のチェックボックスにチェックをいれたら、2のテキストボックスが有効 というものです。 ところが、 1のチェック後、1のテキストボックスに文字を入れ、2のチェックを入れると、 1のテキストボックスの中身がクリアされてしまうのです。 逆パターンのチェックをはずしても、同様に片方のテキストボックスがクリアされてしまいます。 動き的には(1のチェック→1のテキスト入力→2のチェック→1のテキストは保持したまま)という風に行いたい場合、どのようにすればよいでしょうか? | ||||
|
投稿日時: 2004-08-05 19:14
う〜ん、普通にWebフォームコントロール貼り付けただけならば、ビューステートによって値は保持されるはずですけどねぇ。なんだろ。
考えられることとしては、 ・テキストボックスのEnableViewStateプロパティがFalseに設定されている (同じようにページ自体のEnableViewStateも。。。) ・ページの初期処理(Page_Load等)で、テキストボックスの内容をクリアしてしまっている それ以外の対処方法としては、AutoPostBackはやめて、クライアントスクリプトでテキストボックスの入力可/不可を切り替えるかな。 (どっちかっていうと、このくらいの処理ならばサーバーラウンドトリップが発生しないこちらの方法をすすめますが) | ||||
|
投稿日時: 2004-08-05 19:40
TextBoxのText等は、値の保持にビューステートを使ってませんよ。
http://support.microsoft.com/default.aspx?scid=kb;ja;316813 なので、設定とかではなくてご自分でクリアしているのでは? >同様に片方のテキストボックスがクリアされてしまいます。 片方のというのが、解決の糸口になりますね。 ふたつのテキストボックスの違う所や、違う扱いをしているコードの部分を注意深く見てみてください。 | ||||
|
投稿日時: 2004-08-05 20:41
>TextBoxのText等は、値の保持にビューステートを使ってませんよ。
おお。ビューステートで保持されるのはGet/Postで送信されない属性だけだったんですね。知りませんでした。 試してみたところ確かにEnableViewStateの設定と関係なく保持されてました。 (ただ、EnableViewState=falseで、かつEnabled=false(HTML上でdisabled=true)になっていると保持されない。。。これも仕様?) スレの本題と関係ないですが、勉強になりました(^^)/ | ||||
|
投稿日時: 2004-08-06 00:33
TextBoxに対して、DataBind()を実行していませんか?
DataBind()を実行すると、それに関連するデータがコントロールに反映してしまいます。それによって、テキスト内容がクリアされることがあります。 DataBind()に心当たりがないのであれば、多分使っていないかも…^^ [ メッセージ編集済み 編集者: ZEBRA 編集日時 2004-08-06 00:34 ] | ||||
|
投稿日時: 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を知らなかったので、大変勉強になりました。 皆様ありがとうございました。 | ||||
|
投稿日時: 2004-08-06 13:13
先に提示したように、TextBoxのTextプロパティの値はViewStateを使っておりません。
ですので、EnableViewStateは関係ありません。 何か他の部分も変更しませんでしたか? ソースの「テキストボックスのEnableViewStateをtrue」にしている部分を消してみると、Textが保持されなくなりますか?なりませんよね。
元々TrueのものをTrueに設定してやっても動作が変わるとは思えませんし。 | ||||
1
