2008-10-04 70 views
12

我想重新創建更新面板回發,而無需使用更新面板執行回發。做這件事的通用方法是什麼?我如何使用jQuery與asp.net進行onclientclick回發

例如,在Stackoverflow上,當你在一個問題上投票時,它做了一個回傳來更新數據庫,我敢打賭他們沒有使用更新面板。

我有什麼?

我有一個表格數據表。當我單擊td項作爲整個列時,我想要更新數據庫並更新頁面本身的gridview。 gridview會顯示錶中所有當前點擊的項目,因爲它是通過「我們的方法」更新的。

尋找一個很好的通用方法,我可以使用很多異步回發沒有更新面板。

回答

17

Stack Overflow的工作方式與CodeProject文章的兩種重要方式有所不同。

  • Stack Overflow正在對ASP.NET MVC控制器操作發出AJAX請求,而不是獨立的ASPX頁面。您可以將其視爲ASP.NET AJAX頁面方法的MVC模擬。在這兩種情況下,ASPX方法在性能方面都會落後。

  • Stack Overflow的AJAX請求返回一個JSON序列化結果,而不是任意明文或HTML。這使得在客戶端處理它更加標準化並且通常更清潔。

例如:當我投這個問題了一個的XmlHttpRequest請求到/問題/ 171000 /投票,由具有一個在POST數據的2「voteTypeId」。

處理請求加入我的投票表某處,然後用這個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/

2

您可以使用標準的AJAX調用來完成此操作。創建一個.aspx頁面,在其Page_Load方法中更新數據庫,並將任何所需的信息(如更新後的當前DB值)顯示爲XML。然後使用jQuery對該頁面進行AJAX調用。

您也可以返回HTML片段(即更新後的GridView),並使用jQuery將更新後的HTML插入當前頁面。

編輯:此頁面上 樣品2應該是非常接近你想要什麼:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx

+0

因此,這是路#1可能可以? – 2008-10-05 01:18:51

+1

Dave Ward的回答描述了SO如何工作。 – AaronSieb 2008-10-05 03:41:12

2

link是我發現是做的最好的事情,允許我使用JavaScript和Web方法。