- PR -

AJAXによるドロップダウンリストへの値セットについて

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-08-10 09:53
お世話になります。

今回ASP.NET2003にて開発を行っています。
テキストボックスに値を入力してフォーカスをはずすと
そのテキストボックスの値をキーにしてDBよりデータを
取得し、そのデータをドロップダウンリストにセットす
るような処理を行っています。
 この際にドロップダウンリストに値をセットするまで
はできたのですが、なぜかボタンを押下するなどポスト
バックを発生させるような処理を行った際にドロップ
ダウンリストの中身が消えてしまいます。 これを消えない
ようにすることは可能でしょうか??

※なぜだかテキストの場合は消えないのですが・・・

下記にjavascriptにて実装したコードの例をのせます。

function LoadStates()
{
 var DL1List = document.getElementById("<%=DL1.ClientID%>");
 if(DL1List.options.length != 0){
DL1List.options.length = 0;
}
for (var i = 0; i < 5; ++i)
{
DL1List.options[DL1List.options.length] = new Option(i, i);
}
}

何卒宜しくお願いします。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-10 10:08
モノが見えないので予想ですが。

ボタンを押下することで、画面が遷移するのでスクリプトで追加されたオプションが消える、ということではないんでしょうか。
そうであれば、とくに不思議ではないんですが。

画面が遷移するのであれば、その時点でのドロップダウン内のリストをどこかに保持して、描画時に再現しなければいけないと思いますが。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-08-10 11:12
お返事ありがとうございます。

mioさんのおかげで原因がなんとなくつかめました。
そこで

"画面が遷移するのであれば、その時点でのドロップダウン内のリストをどこかに保持して"

とあるのですがこのタイミングがどの時かというのを教えていただきたいのですが
ちなみにボタンを押した時にページロード処理に来る時にはすでにドロップダウン
リストの値はきえていました。

宜しくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-08-10 11:12
クライアント側で勝手に追加したリストボックスの要素の内容は
サーバ側で知りようがない(ポストされてくるデータはどの要素を選択したかだけ)ので、
hidden などに隠してにポストしてあげるか、ページの読み込み時にAJAXで再度取得してあげないといけないと思います。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2006-08-10 12:05
あるいは、cookieに隠しておくかですね。

オプションの内容はサーバ側で作っているみたいなので、クライアント側と同期するリストを、セッションに持っておくのも良いかも知れません。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-08-10 12:35
かるあさんmioさんお返事ありがとうございます。

お二人のいわれるようにどこかに情報を退避させて
おいてそれをページ遷移時にロードしないとだめ
みたいですね。

今回の開発なのですが

明細情報

ドロップダウン テキスト テキスト ドロップダウン ×8(縦に8つ分)

  ありまして前3つのコントロールの条件よりデータを取得し
  4つ目のドロップダウンにセットするということを行いたい
  のですが、当初の考えは3つめのコントロールと4つ目のコントロール
  の間にボタンを入れて4つめのドロップダウンにデータを追加
  する予定だったのですが、お客様の要望によりボタンはなくしてほしい
  ということになりました。そこで3つめのテキストボックスのTextChanged
  イベントで検索することも考えたのですが、この場合3つめのテキスト
  ボックスの内容が変わらないと検索できないので断念しました。
  (テキストボックスがロストフォーカスした時にイベントがとれるの
   でしょうか?)

  こういった場合何か他にもいい方法はないでしょうか?
  わかれば教えて下さい。

  宜しくお願いします。
  
未記入
ベテラン
会議室デビュー日: 2003/06/26
投稿数: 76
投稿日時: 2006-08-10 13:33


[ メッセージ編集済み 編集者: 未記入 編集日時 2007-01-19 21:48 ]
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-08-10 20:45
ぜうすさんお返事ありがとうございます。

とりあえず方針としてはセッションへ値を退避しておき
画面遷移時にその値を再セットしようかと思います。

ここでなんども聞いてわるいのですが、javascriptから
session変数に値を書き込むやり方はどのようにするのが
よいのでしょう? 一応
<% sesion("a") = "4" %>
などのようにすれば値をセットすることは調べて
わかったのですがこの場合 <% 〜 %>の外で記述している
値などを<% 〜 %>にもってくるにはどうすればよいの
でしょうか?

宜しくお願いします。


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