Asp.net

如何使用帶有 asp.net 的 jQuery 進行 onclientclick 回發

  • December 14, 2017

我想在不使用更新面板進行回發的情況下重新創建更新面板回發。這樣做的通用方法是什麼?

例如,在 Stackoverflow 上,當您對某個問題投贊成票或反對票時,它會回發以更新數據庫,我敢打賭他們沒有使用更新面板。

我有什麼?

我有一張帶有表格數據的表格。當我點擊td整個列的項目時,我想更新數據庫並更新頁面本身的網格視圖。網格視圖顯示了表中所有目前點擊的項目,因為它是通過“我們的方法”更新的。

尋找一種好的通用方法,我可以在沒有更新面板的情況下用於許多非同步回發。

Stack Overflow 的工作方式與那篇 CodeProject 文章在兩個重要方面不同。

  • Stack Overflow 正在針對 ASP.NET MVC 控制器操作而不是獨立的 ASPX 頁面發出 AJAX 請求。您可能會將其視為 ASP.NET AJAX 頁面方法的 MVC 類似物。在這兩種情況下,ASPX 方法在性能方面都會落後。
  • Stack Overflow 的 AJAX 請求返回 JSON 序列化結果,而不是任意純文字或 HTML。這使得在客戶端處理它更加標準化並且通常更清潔。

例如:當我投票贊成這個問題時,向 /questions/171000/vote 發出了一個 XmlHttpRequest 請求,POST 數據中的“voteTypeId”為 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/

引用自:https://stackoverflow.com/questions/171000