我在這裏發帖給我自己我的臨時(?)答案。
因爲有顯然沒有辦法來檢測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;
}
}