Asp.net
如何使用帶有 asp.net 的 jQuery 進行 onclientclick 回發
我想在不使用更新面板進行回發的情況下重新創建更新面板回發。這樣做的通用方法是什麼?
例如,在 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/