12

更新パネルを使用してポストバックを実行せずに、更新パネルのポストバックを再作成したいと考えています。これを行うための一般的な方法は何ですか?

たとえば、Stackoverflow では、質問に賛成票または反対票を投じると、データベースを更新するためにポストバックが行われますが、彼らは更新パネルを使用していなかったに違いありません。

私は何を持っていますか?

テーブルデータを含むテーブルがあります。列全体として項目をクリックtdすると、データベースを更新し、ページ自体のグリッドビューも更新したいと考えています。グリッドビューは、「私たちの方法」によって更新されたため、テーブル内で現在クリックされているすべての項目を表示します。

更新パネルなしで多くの非同期ポストバックに使用できる優れた一般的な方法を探しています。

4

2 に答える 2

17

Stack Overflowの動作方法は、CodeProjectの記事とは2つの重要な点で異なります。

  • Stack Overflowは、スタンドアロンのASPXページではなく、ASP.NETMVCコントローラーアクションに対してAJAX要求を行っています。これは、ASP.NETAJAXページメソッドのMVCアナログと見なすことができます。どちらの場合も、ASPXメソッドはパフォーマンスの点で遅れをとっています。

  • Stack OverflowのAJAXリクエストは、任意のプレーンテキストやHTMLではなく、JSONでシリアル化された結果を返します。これにより、クライアント側での処理がより標準化され、一般的にクリーンになります。

例:私がこの質問に投票したとき、POSTデータの「voteTypeId」が2のXmlHttpRequestリクエストが/ questions / 171000/voteに対して行われました。

リクエストを処理したコントローラーは、私の投票をどこかのテーブルに追加し、次の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/

于 2008-10-05T03:13:37.717 に答える
2

これを行うには、標準の AJAX 呼び出しを使用するだけです。Page_Load メソッドでデータベースを更新する .aspx ページを作成し、必要な情報 (更新後の現在の DB 値など) を XML として表示します。次に、jQuery を使用してそのページへの AJAX 呼び出しを行います。

また、HTML フラグメント (つまり、更新された GridView) を返し、jQuery を使用して更新された HTML を現在のページに挿入することもできます。

編集: このページのサンプル 2 は、必要なものに非常に近いはずです:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx

于 2008-10-04T21:18:33.160 に答える