1


0

ASP.Net ListBoxの値はjQuery操作後に変更を送信しませんか?

ブラウザに「リスト」としてレンダリングされた2つのListBoxコンポーネントを持つASP.Netページがあります。 DOMを操作して、jQueryを使用して要素をあるリストから別のリストに移動しています。 次に、すべての要素をマウスで選択し、フォームをポストバックします。 これにより、すべてのリスト要素がフォームとともに投稿されます。

button_save()イベントハンドラーでフォームを送信すると、Request.Form [<>]値が正しいです。 ただし、ListBoxコントロール自体、特にItemsコレクションは、私の変更を反映しません。

また、Fiddlerを使用して、選択したアイテムを変更し、フォームを送信しました。 上記と同じように、Request.Formの値は異なりますが、ListBoxの値は変わりません。 誰が何が起こっているのか、私がどのような間違った仮定を立てているのかを知っていますか?

3 Answer


1


問題は、サーバーがクライアント側の選択ボックスに加えられた変更を認識しないListBoxオブジェクトを構築することだと思います。 つまり、リクエストから送信された情報ではなく、ASP.NETマークアップを使用してアイテムのリストを作成します。

Request.Formの値に直接アクセスする以外、これに対する回避策を知りません。


1


根本的な問題は、リストボックスのオプションがページのビューステートに保存されていることだと思います。 クライアント側のjavascript / jqueryを使用してリストの内容を変更すると、それらの変更はビューステートに反映されません。 したがって、ポストバックすると、ASP.NETはビューステートを使用して分離コードのリストを作成し、クライアント側の変更は失われます。

これを解決する1つの方法は、クライアント側(javascript / jquery)ではなく、ポストバックを介してリストのコンテンツを操作することです。 そのようにすることで、リストボックスへのすべての変更がビューステートに組み込まれ、ポストバックごとに一貫性が保たれます。

私はjqueryの大ファンです(ポストバックやMS-Ajax / partial-postbacksよりもはるかに)、このアプローチはあまり魅力的ではないかもしれないことを完全に理解しています。 残念ながら、それは私が今考えることができる唯一のものです。 たぶん、他のstackoverflow’ersはより良い選択肢を持っているでしょう。


0


ラリー、あなたが解決策を見つけられなかった場合、ここに私がやることがあります。

他の仲間が述べたように、DOMクライアント側を変更しているため、変更はViewStateに反映されないため、コードビハインドから新しい値にアクセスできません。

解決策として、jQueryでリストを変更するたびに、非表示の値を作成し、その値をリストのシリアル化された形式(値とテキストの組み合わせの組み合わせ)に設定できます。 その後、コードビハインドから隠された値にアクセスし、最後にデシリアライズしてすべての変更を取得できます。 この方法は実際には非常に簡単です。