私は Web 開発にかなり慣れていないので、よくわからない次の問題に遭遇しました。Visual Basic を使用して VS2010 で作業しています。
私はグリッドビューを持つページ(aspx)を持っています。これには、チェックボックスのある列と、空の非表示のドロップダウンリストを持つ「アクション」列を含むいくつかの列があります(すべての行にこれがあります)。
ユーザーがボックスにチェックを入れるたびに、AJAX 呼び出し (AJAX での私の最初の試みです :-)) を使用してサーバーからいくつかの値を取得し、それらの値を使用して、選択した行の「アクション」列にドロップダウンリストを設定します。ここまでは順調ですね。
次に、ユーザーはドロップダウンリストで選択を行い、ボタンを押すと (アップロード)、情報を処理するためにポストバックが実行されます。
ただし、コード ビハインドでは、ドロップダウン リストに追加された項目を取得できません (選択した値は言うまでもありません)。ドロップダウンリストを取得できますが、項目がありません。
しばらくグーグルで調べた後、フォームがサーバーに投稿されたときにクライアント側の変更が保持されないことに気付きましたが、これも奇妙に思えます。ページの作成時にドロップダウンが作成されるのに、javascipt で追加された項目を保存しないのはなぜですか? 特に、私が見つけたいくつかの回避策では、追加されたアイテムまたは選択された値を格納するために隠しフィールドを使用しています。それらを隠しフィールドに保存できる場合、実際のドロップダウンリストに保存できないのはなぜですか?
私は明らかにウェブサイトの仕組みを理解していません...しかし、これは、ページが最初にロードされた後、ドロップダウンやリストボックスなどの値を変更できることを意味しますが、これらはサーバー側では利用できませんか?
編集: いくつかのコード; 最初の javascript-snippet は、AJAX 呼び出しで取得したさまざまな値を追加する方法です。
var drop = row.findElement("ddlAction"); //find the dropdownelement in the DOM
for (j = 0; j < dropdownitems.length; j++) { //add all the options from xml
option = document.createElement("option");
option.text = dropdownitems[i].getAttribute("text");
option.value = dropdownitems[i].getAttribute("value");
drop.add(option, null);
}
これは正常に機能し、ドロップダウンリストがいっぱいになり、選択できるようになりました。しかし、ページが投稿されたら、サーバー コードで次のことを行います。
Dim SelCount As Integer = LocalFilesGrid.SelectedItems.Count
If SelCount >= 0 Then
For Each dataItem In LocalFilesGrid.SelectedItems
Dim drop As DropDownList
drop = dataItem.FindControl("ddlAction")
If drop.Items.Count = 0 Then 'always zero
MsgBox("Nope")
End If
Next
End If
グリッドの選択された行をループして、対応するドロップダウンリストと選択された値を取得できるようにしたいと思います。