1

.NET Web アプリケーションで jQuery を使用したことがある人なら誰でも、(viewstate、セキュリティなどの理由で) ポストバック中に jQuery を介してクライアントで行われた変更が必ずしも Web サーバーに保持されないという問題に遭遇したことがあるでしょう。

私のシナリオ: 2 つの異なる ASP.NET ドロップダウンを持つ GridView があります。ドロップダウンの 1 つは page_load 中に入力され、もう 1 つは空白のままです。ユーザーが最初のドロップダウンで項目を選択すると、jQuery ajax を使用して Web サーバーからデータを取得するイベントが発生し、このデータがクライアントに返され、 2 番目のドロップダウン。それはすべて初歩的で、起動が簡単でスムーズです。大好きです。

ただし、私が気に入らないのは、ユーザーが 2 番目のドロップダウン (jQuery ajax 呼び出しによって入力された後) で項目を選択し、[保存] ボタンをクリックすると (ポストバックが発生します)、ドロップダウンの選択が行われるという事実です。サーバー側で空になります (これは基本的に、サーバーがドロップダウンにアイテムが含まれていること、またはユーザーがそのアイテムを選択したことを認識していないことを意味します)。明らかに、これはビューステートでドロップダウンが空であるという事実に関係しており、この背後にある理由を完全に理解していますが、jQuery と .NET を混在させようとすると非常にイライラします。

私の質問は次のとおりです: jquery を使用して ASP.NET ドロップダウンにデータを入力し、その中の項目をポストバックまで保持するにはどうすればよいですか?

助けてくれてありがとう!

4

3 に答える 3

3

簡単な答え:ポストバックしないでください!

$.postハンドラー(.ashx)または他のページに使用して、そこにあるものを保持します。

まだポストバックしたいですか?問題ありません。すでに2番目のアイテムがあるのでid、投稿の処理時に1番目と2番目のドロップダウンを事前に入力するだけです。

しかし、私は決してポストバックしません...データを投稿するために使用する$.ajaxか、単純なフォーム$.postで、レイアウトを処理するページとデータを処理するページの2つの異なるページを作成します...これはASP.NETで非常に一般的ですMVCですが、WebFormsの動作方法のため、このように区別する必要があります。

これが他の質問のプロセス全体に対する私の答えです。

于 2012-11-09T00:36:39.850 に答える
2

あなたが言うように、「サーバーはドロップダウンにアイテムが含まれていることを認識していません」。

私の提案:サーバーの観点から実際に行っているのはテキスト文字列を投稿することなので、2番目のドロップダウンの代わりに単純な入力フィールドを使用してください。そのフィールドを非表示にして、ユーザーのインターフェイスとして機能する純粋なクライアント側のドロップダウンと同期させることができます。

ちなみに、これは一部の選択要素がSharePointでどのように機能するかを示しています。

于 2012-11-09T00:38:17.213 に答える
1

私は以前にこの問題に直面したことがあります。回避策として、2番目のドロップダウンの横にHiddenFieldコントロールを配置し、その非表示フィールドに2番目のドロップダウンと同じ値を入力します。コードビハインドでは、次のようにHiddenField値にアクセスできます。

HiddenFieldID.Value 

非表示フィールドにはテキストプロパティではなく、値プロパティがあることに注意してください。

于 2012-11-09T03:39:05.800 に答える