- PR -

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

投稿者投稿内容
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-09-28 11:13
LoadじゃなくてPreRenderのタイミングだとどうなってますかね。

http://www.hollytown.net/UniBlog/PermaLink.aspx?id=c50ee967-0ca7-4ca1-87d4-42305a6637ab
こんな感じでASP.NETの場合、イベントのそれぞれが処理されるタイミングは
決まっていますから、Loadの時点でまだ変更になったデータがセットされていない、
ということもあるかと。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-09-28 11:23
引用:
Page_Loadではクライアントスクリプトで自動的に変更された2つ目のコンボボックスの内容を確認していました。

いや、コード上のどういう値を見ているのかときいたつもりでした。HtmlSelectなら
HtmlSelect.Valueとか、HtmlSelect.Items[SelectedIndex].Textとか。

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

それ重要です。でもなぜSystem.Web.UI.WebControls.DropDownListでは
いけないのですか?もちろんHtmlSelectがタブーというわけではないですが。

編集:文字列を直接・・の話はあまり問題ではないかもしれないので削除

[ メッセージ編集済み 編集者: べる 編集日時 2004-09-28 11:51 ]
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2004-09-28 12:07
もうここまできたら、
質問者は現象が再現できるソースコードを
掲示して回答を募ったほうが、早く回答が得られますよ。

周りの人が、こうではないか、ああではないかと
状況を推測するのはしんどいです。
abc
会議室デビュー日: 2004/09/27
投稿数: 5
投稿日時: 2004-09-28 12:23
お世話になります。

一郎様
 HTMLのソースを確認しても、初めに設定したドロップダウンリストの内容がそのまま表示されています。
今は1つ目のドロップダウンリストのonchangeのイベントで以下のようなクライアントスクリプトが機能するようにしております。

予め1つ目のドロップダウンリストの値が変更された時に
2つ目のドロップダウンリストに表示させたいTEXTの配列、VALUEの配列を作成しておき
 ↓
Form1.2つ目のドロップダウンリスト.options.length = 0;
for (i=0;i<値の配列.length;i++){
 Form1.2つ目ドロップダウンリスト.options[i]=
   new Option(TEXTの配列[i],VALUEの配列[i]);
}

で2つ目のドロップダウンリストのTEXT、VALUEを全て変更しています。

従って、HTMLのソースを見ても、初めに設定した内容が表示されます。


小野様
 PreRenderのイベントで2つ目のドロップダウンリストの値(HtmlSelect.Value)
を拾って見ましたが、やはりクライアントで更新する前のものがセットされていました。

べる様
 値はHtmlSelect.Valueをみております。
 System.Web.UI.WebControls.DropDownListを使用しない理由ですが、得にありません。強いていうならば、HtmlSelectの方がDropDownListより処理が軽そうだったからです。(調べたわけではないので、全くの主観です。)

ところで、前にも書かせていただきましたがなぜ、Request.Form("コンボボックス名")の値とコンボボックス名.Valueの値が異なるんでしょうか
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-09-28 13:11
1つ目のドロップダウンリストですが、PostBackしたときもそのドロップダウン
リストに表示するデータを追加する処理がPage_Loadに入ってたりしませんか?
この場合、PostBackであってもPage_Loadで1つ目のドロップダウンリストが
再度新たに作成することになって、ブラウザから返って来た値は無視されると
思います。
そのあたりは大丈夫ですかね?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-09-28 13:47
引用:
>>「2つ目のコンボボックスを手動で変えた場合には、サーバー側で正しく値を取得できるんです」
>についてもサーバ側で正しく値を取得できません。
ということは、スクリプトで変更しているからとかは関係ないということですよね。

と一郎さんがおっしゃっているように現象が再現するもっとも単純なケース
(この場合は「手動で変えた場合」つまりjavascriptをいっさい使用しないケース)
について考えるべきだと思います

あと「変更前の内容」をどのように設定しているかも重要です。小野さんが
おっしゃってるIsPostBackを意識しているか、ともからみますし。

引用:
ところで、前にも書かせていただきましたがなぜ、Request.Form("コンボボックス名")の値とコンボボックス名.Valueの値が異なるんでしょうか

javascriptで<option>内の文字列を変更した場合については、私が勘違いして
いなければ再現しましたし原因もなんとなくわかります。でも、手動で選択を
切り替えた場合は再現できないですね(、、やっぱり私の勘違いかな、、)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-28 21:14
ドロップダウンリスト2の「初期化」を、どこ(C/S)でやっていますか?

Sの場合、どのメソッド(またはイベントハンドラ)でやっていますか?

本当にJavaScriptで値が変更されていますか?(これはRequestを見ると変わっているということですから、okですね)

CとSの、ドロップダウンリスト2の宣言、およびHTML上での表記(IE上でソースを見る)は、どうなっていますか?

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