2012-05-28 66 views
2

據我所知,UpdatePanel更新時,整個頁面被重建,但只有UpdatePanel內的內容實際上被重新加載到頁面上。防止UpdatePanel加載服務器上的整個頁面

我的網頁的某些部分是呈現相當慢(由於數據庫調用),我不希望所有這些對回傳重新加載,如果只需要重新加載頁面的一小部分。

示例 - 在頁面頂部(UpdatePanel外部),我顯示一組總數,並在UpdatePanel內部有一個帶有「下一頁」按鈕的網格。當我點擊「下一步」時,我想要更新網格,但我不希望服務器再次查詢數據庫中的所有總數。

這樣做的最好方法是什麼?

回答

0

您可以隨時檢查頁面的IsAsync屬性以排除運行中的代碼塊。

0

標準方法是在運行總計邏輯之前進行!PostBack檢查。這樣,它們只在頁面首次加載時計算出來,然後它們保存在您用來顯示它們的控件的ViewState中。

或者,如果您使用數據綁定(使用ObjectDataSource),那麼將自動爲您處理,因爲數據綁定只會在第一次加載頁面時發生。

1

您可以檢查回發是否來自更新面板。如果是這種情況,那麼你只是不計算總數。

如果你有多個UpdatePanel的,那麼你可以檢查通過檢查這是什麼的UpdatePanel做了回傳:

bool isUpdatePanelPostBack 
     = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID 
      .Equals(yourUpdatePanel.UniqueID); 

if(!isUpdatePanelPostBack) { 
    //calculate your totals 
} 

如果您的網頁上只有一個UpdatePanel的,那麼你可以只檢查IsInAsyncPostback用於設置布爾:

bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;