0

私は 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

グリッドの選択された行をループして、対応するドロップダウンリストと選択された値を取得できるようにしたいと思います。

4

1 に答える 1

1

When you mix such different technologies you will end up in troubles like this. What you are trying to do is bit of Ajax and a bit of ASP.NET. Choose one and then use it. If you choose ASP.NET instead of AJAX call use UpdatePanel which will simplify your life.

If you want to Ajax stuff your self, then handle the button click and submit the request by ajax rather than postback.

The reason why you are able to retrieve the drop down but not the items because you must have declared the drop down in aspx but the items were added on client side, so server has no knowledge about the items.

The reason is ASP.NET uses view state and you can not mess with view state. So you can add the data to hidden field and read them at server but you can not write the data in view state.

The best way is use ASP.NET with UpdatePanels. If you mix, then you will have to keep doing some sort of trick at every step. If you want to do your own Ajax stuff better use MVC and Razor(not mvc with aspx) because it is made for such use.

于 2013-10-11T14:39:03.507 に答える