- PR -

クライアントスクリプトで変更したコンボボックスの内容をサーバで取得する方法

投稿者投稿内容
abc
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-27 21:52
お世話になります。

早速ですが質問させていただきます。

今問題となっているのはASP.NETでクライアントスクリプトにて変更したコンボボックスの内容をサーバに送信すると、変更前の内容が送られてくるというものです。

具体的にはコンボボックスは2つあり、1つ目のコンボボックスの値が変更されるとクライアントスクリプトにてもうひとつのコンボボックスの内容を書き換えるようにしています。
ここで、
1)クライアント上で1つ目のコンボボックスの内容を手動で変更
2)クライアントスクリプトで2つ目のコンボボックスの内容も自動的に変更
3)更新ボタンを押下して、サーバに送信
するとサーバでは2)で変更されたはずのコンボボックスの内容が変更前のものになってしまい、困っております。(Page_Loadイベントの始めで確認しても変更前の値がセットされていました。)

どのようにすれば上記2)の変更後のコンボボックスの値を取得できるのでしょうか?

ご教示の程おねがいします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-09-28 09:46
2)で行っている処理(実際のスクリプト)や
「2つ目のコンボボックスを手動で変えた場合には、サーバー側で正しく値を取得できるんです」
なんて言葉を添えておくと解決が早いと思いますよ。

実際どうです?
abc
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-28 10:07
返信ありがとうございます。

>>「2つ目のコンボボックスを手動で変えた場合には、サーバー側で正しく値を取得でき>>るんです」
についてもサーバ側で正しく値を取得できません。

2つ目のコンボボックスのEnableViewStateをFalseに変えても結果は同じでした。

こちらではお手上げの状態です・・・
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-09-28 10:20
ん、Page_Loadイベントで、変更された値を確認しているんですか???
なんか、おかしくないですか??

更新ボタンが押されたときに、そのコンボボックスの値を取得したいのだから
更新ボタンのクリックイベントハンドラルーチンの中で値を
確認すべきだと思いますが。

Pageインスタンスは常に使い捨てなので、Page_Loadで確認すると、
クライアントスクリプト云々以前に、常に、デフォルトのセット値に
なるのは当然だと思うんですが。

やりたいことに対して、ピントはずれなことを言ってますか???
abc
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-28 10:38
ご指摘ありがとうございます。

こちらの説明不足だったのですが、初めに更新ボタン押下時のクリックイベントハンドラルーチンの中で確認して、結果がクライアントで更新される前の値に戻っていたため
に質問させて頂いております。

ご教示の程よろしくお願い致します。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-09-28 10:42
引用:
2)で行っている処理(実際のスクリプト)や

これ重要です。あとPage_Loadでどの値を確認してますか。
コンボボックスってDropDownListのことですよね?選択している行を変えただけなのか
文字列そのものまで変えたのかも少し重要かもですね。
それともTextBoxですか?

・・あ、手動で変更しても同じだったのか・・

[ メッセージ編集済み 編集者: べる 編集日時 2004-09-28 10:56 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-09-28 10:50
>>「2つ目のコンボボックスを手動で変えた場合には、サーバー側で正しく値を取得できるんです」
>についてもサーバ側で正しく値を取得できません。

ということは、スクリプトで変更しているからとかは関係ないということですよね。
そこをはっきりさせないと。

で、ブラウザでページを表示してそのHTMLソースを見てください。
コンボボックス(と呼んでいますがドロップダウンリストですね)の部分を見てみると、ドロップダウンリストの項目として表示されるテキストと、画面には表示されませんがvalueというものがあるはずです。例えば、
コード:
<option value="dog">犬</option>
<option value="cat">猫</option>


こんなの。
サーバー側に送られるデータはこのvalueです。では、
コード:
<option value="dog">犬</option>
<option value="cat">猫</option>
<option value="dog">海豚</option>


このような3つの項目がある状態で「海豚」と表示されているものを選択したらどうなるでしょう。サーバー側では"dog"が選択されたとしか分かりません。

・・・ま、これが原因かどうかは分かりませんが、こういうこともあるということで。
abc
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-28 10:57
お世話になります。

Page_Loadではクライアントスクリプトで自動的に変更された2つ目のコンボボックスの内容を確認していました。

コンボボックスは正確にはSystem.Web.UI.HtmlControls.HtmlSelectを使用しています。

クライアントスクリプトでは選択している行ではなく、文字列を全て変更しております。

 ↑これってASP.NETでは行なってはいけないことなんですか?

こちらでも1つわかったことがありまして、問題となっている「クライアントスクリプトで自動的に変更された2つ目のコンボボックスの内容」ですが、ASPで使用していた
Request.Form("コンボボックス名")で変更された値が取得できることがわかりました。

ただし、コンボボックス名.Valueではクライアントで変更前の値がセットされています。
なぜ、Request.Form("コンボボックス名")の値とコンボボックス名.Valueの値が異なるんでしょうか?

全く持って???です。

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