2015-04-17 50 views
2

我在同一頁面中使用了多個UpdatePanel,使用UpdateMode = Conditional,並且我試圖找到一種乾淨的方式來僅執行與UpdatePanel相關的代碼更新。檢測UpdatePanel是否受到Update()方法調用的影響

所以,當我打電話從JS一個__doPostBack,我能夠,背後端的代碼,以檢測其被要求使用Request["__EVENTTARGET"](這使我在UpdatePanel的ClientID刷新的UpdatePanel的名稱)。

但是,當我打電話給UpdatePanel1.Update()方法(從服務器端)時,是否有內置的方法來知道更新面板是否即將更新?

回答

0

我在這裏發帖給我自己我的臨時(?)答案。

因爲有顯然沒有辦法來檢測UpdatePanel是否正在更新(當UpdatePanel更新的代碼後面)時,我創建了一個類來處理更新,並在會話中放置一些數據,所以,這個類將能夠判斷UpdatePanel是否正在更新。 因此,我不直接調用UpdatePanel.Update(),而是UpdatePanelManager.RegisterToUpdate()

方法bool isUpdating()能夠告訴UpdatePanel是否正在更新,並且可以通過使用HttpContext.Current.Request["__EVENTTARGET"]通過Javascript自動判斷updatePanel是否正在更新。

注意:isUpdating()需要在OnPreRender Page事件中使用。

public static class UpdatePanelManager 
{ 

    private const string SessionName = "UpdatePanelRefresh"; 

    public static void RegisterToUpdate(System.Web.UI.UpdatePanel updatePanel) 
    { 
     updatePanel.Update(); 
     if (HttpContext.Current.Session[SessionName] == null) 
     { 
      HttpContext.Current.Session[SessionName] = new List<string>(); 
     } 
     ((List<string>)HttpContext.Current.Session[SessionName]).Add(updatePanel.ClientID); 

    } 

    public static bool IsUpdating(System.Web.UI.UpdatePanel updatePanel) 
    { 
     bool output = false; 

     // check if there is a JavaScript update request 
     if (HttpContext.Current.Request["__EVENTTARGET"] == updatePanel.ClientID) 
      output = true; 

     // check if there is a code behind update request 
     if (HttpContext.Current.Session[SessionName] != null 
      && ((List<string>)HttpContext.Current.Session[SessionName]).Contains(updatePanel.ClientID)) 
     { 
      output = true; 
      ((List<string>)HttpContext.Current.Session[SessionName]).Remove(updatePanel.ClientID); 
     } 

     return output; 

    } 

    public static bool IsUpdatingOrPageLoading(System.Web.UI.UpdatePanel updatePanel, System.Web.UI.Page page) 
    { 
     bool output = false; 

     if (!page.IsPostBack || IsUpdating(updatePanel)) 
      output = true; 

     return output; 

    } 


} 
相關問題