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

时间:2015-04-17 15:16:41

标签: c# asp.net asp.net-ajax

我使用UpdateMode = Conditional在同一页面中使用多个UpdatePanel,并且我试图找到一种干净的方法来仅执行与UpdatePanel相关的后续代码,该代码将被更新。

因此,当我从JS调用__doPostBack时,我能够在代码背后检测要求使用Request["__EVENTTARGET"]刷新的UpdatePanel的名称(它为我提供了UpdatePanel的ClientID

但是当我调用UpdatePanel1.Update()方法(从服务器端)时,是否有内置的方法来了解更新面板是否即将更新?

1 个答案:

答案 0 :(得分:0)

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

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

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

注意: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;

    }


}