ASP.NET UpdatePanel更新
多個 UpdatePanel
一個頁面可以承載幾個UpdatePanel。默認(rèn)情況下,當(dāng)一個頁面上的 UpdatePanel更新時,該頁面的其他 UpdatePanel也會更新。有時候這是您想要的,但多半您并不需要每個 UpdatePanel更新來響應(yīng)其他 UpdatePanel。
通過將頁面上每個 UpdatePanel 控件的 UpdateMode 屬性設(shè)置為 Conditional,您可以選擇更新哪個 UpdatePanel 實例(及更新的時間)。然后,在 UpdatePanel更新和調(diào)用服務(wù)端事件處理程序的時候,請調(diào)用您要更新的其他面板上的 UpdatePanel.Update。這樣可以通過減少呈現(xiàn)的控件的數(shù)量來減輕服務(wù)器的負(fù)載,而且它還減少了響應(yīng)中的數(shù)據(jù)量,因為不進行更新的 UpdatePanel 不會將任何數(shù)據(jù)添加到響應(yīng)中。
不使用 UpdatePanel更新
AJAX 不僅可以創(chuàng)建更好的用戶體驗,它還可以提供更高效的網(wǎng)絡(luò)通信。當(dāng)發(fā)生傳統(tǒng)的 ASP.NET 回發(fā)時,Web 窗體中包括視圖狀態(tài)在內(nèi)的所有數(shù)據(jù),都會傳輸?shù)交匕l(fā)中的服務(wù)器。視圖狀態(tài)是 ASP.NET 頁面,尤其是使用 DataGrid 和 GridView 控件的 ASP.NET 頁面似乎會反應(yīng)遲緩的一個原因。具有太多視圖狀態(tài)的頁面會降低性能,并且具有太多視圖狀態(tài)的頁面在 ASP.NET 應(yīng)用程序中都太常見。
用 AJAX 回調(diào)替代 ASP.NET 回發(fā)的好處之一是能正確完成,AJAX 回調(diào)僅傳送需要被傳送的數(shù)據(jù)。這意味著,它們不必將視圖狀態(tài)包括在該傳輸中。
當(dāng)您使用 UpdatePanel 在一個頁面上執(zhí)行無閃爍更新時,您可能會認(rèn)為您在進行高效構(gòu)建。畢竟,UpdatePanel 使用的是 AJAX,不是嗎?不幸的是,如果您在 UpdatePanel更新時檢驗一下網(wǎng)絡(luò)中的通信,您會發(fā)現(xiàn)您根本就沒有保存什么東西,至少是在發(fā)送的時候沒有保存。通常在回發(fā)期間傳送到服務(wù)器的視圖狀態(tài)數(shù)據(jù)(與其他數(shù)據(jù))也會在 UpdatePanel 回調(diào)期間傳送。事實上,來自 UpdatePanel 的異步 XML-HTTP 請求中所增長的數(shù)據(jù)幾乎與在標(biāo)準(zhǔn) ASP .NET 回發(fā)中增長的數(shù)據(jù)相同。下面是有關(guān) ASP.NET AJAX 不可告人的秘密:UpdatePanel 雖易于使用,但是通信效率不高。
幾乎沒有什么辦法可讓您提高 UpdatePanel 的效率,但是您可以放棄使用 UpdatePanel,并轉(zhuǎn)而使用 ASP.NET AJAX 的其他功能來更新頁面內(nèi)容,它不僅同樣流暢,而且更加高效。它只需要多一點點力氣,但是***的結(jié)果往往讓人覺得是值得付出的,因為您可以大大降低在客戶端與服務(wù)器之間傳輸?shù)臄?shù)據(jù)量。
您還可以減少服務(wù)器上的負(fù)載。當(dāng) UpdatePanel 回調(diào)到服務(wù)器時,被回調(diào)定為目標(biāo)的頁面會完成幾乎整個生命周期 — 該頁面會被實例化,該頁面中的控件也會被實例化,并且 UpdatePanel 內(nèi)的控件也會完成一個正常呈現(xiàn)循環(huán)。那是更新該網(wǎng)頁一部分的大筆開銷。
作為示例,請考慮頁面段。它提供了一個允許用戶鍵入郵政編碼的簡單 UI,并且單擊按鈕就可以用城市和州來初始化城市和州字段。所有的控件都承載在 UpdatePanel 中,因此 Button 控件的回發(fā)被轉(zhuǎn)換為異步回調(diào),并且事件處理程序 (GetCityAndState) 會被調(diào)用到該回調(diào)內(nèi)部的服務(wù)器上。GetCityAndState(未顯示代碼)從郵政編碼文本框中讀取郵政編碼,將其轉(zhuǎn)換成城市和州,并相應(yīng)地初始化表示城市和州的 TextBox 和 DropDownList。由于這些都發(fā)生在 UpdatePanel 內(nèi)部,所以更新非常順暢,并且無閃爍。
【編輯推薦】