asp.netでjQueryを使用してonclientclickポストバックを作成する方法
-
05-07-2019 - |
質問
更新パネルを使用してポストバックを行わずに、更新パネルのポストバックを再作成したい。これを行う一般的な方法は何ですか?
たとえば、Stackoverflowでは、質問に賛成票または反対票を投じると、ポストバックを行ってデータベースを更新するため、更新パネルを使用しなかったに違いありません。
私には何がありますか
テーブルデータのあるテーブルがあります。列全体として td
アイテムをクリックすると、データベースを更新し、ページ自体のグリッドビューも更新したいです。グリッドビューには、「クリックした方法」で更新されたため、現在クリックされているすべてのアイテムが表に表示されます。
更新パネルなしで多くの非同期ポストバックに使用できる適切な汎用メソッドを探しています。
解決
スタックオーバーフローの仕組みは、CodeProjectの記事とは2つの重要な点で異なります。
-
Stack Overflowは、スタンドアロンのASPXページではなく、ASP.NET MVCコントローラーアクションに対してAJAXリクエストを行っています。これは、ASP.NET AJAXページメソッドのMVCアナログと見なすことができます。どちらの場合も、ASPXメソッドはパフォーマンスの面で遅れをとります。
-
Stack OverflowのAJAXリクエストは、任意のプレーンテキストやHTMLではなく、JSONシリアル化された結果を返します。これにより、クライアント側での処理がより標準化され、一般的にクリーンになります。
たとえば、この質問に賛成票を投じると、XmlHttpRequestリクエストが/ questions / 171000 / voteに送信され、" voteTypeId" POSTデータの2つ。
リクエストを処理したコントローラーは、私の投票をどこかのテーブルに追加し、このJSONで応答しました:
{"Success":true,"NewScore":1,"Message":"","LastVoteTypeId":2}
その情報を使用して、このJavaScriptはクライアント側の表示の更新を処理します。
var voteResult = function(jClicked, postId, data) {
if (data.Success) {
jClicked.parent().find("span.vote-count-post").text(data.NewScore);
if (data.Message)
showFadingNotification(jClicked, data.Message);
}
else {
showNotification(jClicked, data.Message);
reset(jClicked, jClicked);
if (data.LastVoteTypeId) {
selectPreviousVote(jClicked, data.LastVoteTypeId);
}
}
};
WebFormsを使用している場合、私のブログで見つけたページメソッドを呼び出す例は間違いなく正しい球場です。
ただし、ページメソッドではなく、中央集権的な機能(この投票例のような)のWebサービスを検討することをお勧めします。ページメソッドは書くのがやや簡単に思えますが、再利用の欠点もあり、実際には存在しないセキュリティが追加されているように見える傾向があります。
これはあなたが見つけたのと同じことをしているが、Webサービスを使った例です(この投稿に対するコメントは実際にあなたが見つけた投稿につながりました):
http:// encosia .com / 2008/03/27 / using-jquery-to-consume-aspnet-json-web-services /
他のヒント
これを行うには、標準のAJAX呼び出しを使用するだけです。 Page_Loadメソッドでデータベースを更新する.aspxページを作成し、必要な情報(更新後の現在のDB値など)をXMLとして表示します。次に、jQueryを使用してそのページにAJAX呼び出しを行います。
HTMLフラグメント(つまり、更新されたGridView)を返し、jQueryを使用して更新されたHTMLを現在のページに挿入することもできます。
編集:
このページのサンプル2は、必要なものに非常に近いはずです。
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx
このリンクは、javascriptとWebメソッドを使用できるようにするための最良の方法であることがわかりました。