检测 UpdatePanel 是否受到 Update() 方法调用的影响

Detect if an UpdatePanel is affected by an Update() method call

我在同一个页面中使用多个 UpdatePanel,UpdateMode = Conditional,我正在尝试找到一种干净的方法来仅执行与将要更新的 UpdatePanel 相关的代码。

因此,当我从 JS 调用 __doPostBack 时,我能够在后面的代码中检测使用 Request["__EVENTTARGET"] 要求刷新的 UpdatePanel 的名称(这给了我 UpdatePanel 的 ClientID)。

但是当我调用 UpdatePanel1.Update() 方法(从服务器端)时,是否有内置方法可以知道更新面板是否即将更新?

我在这里发布给自己我的临时(?)答案。

因为 显然 无法检测 UpdatePanel 是否正在更新(当 UpdatePanel 由后面的代码更新时),我创建了一个 class处理更新,并将一些数据放入会话中,因此,同样的 class 将能够判断 UpdatePanel 是否正在更新。 所以,我不再直接调用UpdatePanel.Update(),而是UpdatePanelManager.RegisterToUpdate().

方法 bool isUpdating() 能够判断 UpdatePanel 是否正在更新,并且可以通过 Javascript 使用 HttpContext.Current.Request["__EVENTTARGET"].

自动判断 updatePanel 是否正在更新

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

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;

    }


}