如何判断JavaScript是否导致我的更新面板更新?

时间:2012-12-14 23:28:27

标签: javascript asp.net updatepanel

我在页面加载后使用以下javascript代码调用更新面板:

<script type="text/javascript">
        function pageLoad(objSender, args) {
            Sys.WebForms.PageRequestManager.getInstance()._doPostBack('updtPnlAccessoriesPanel', 'updtPnlAccessoriesPanel');
        }
</script>

我不希望更新面板(其中包含用户控件)直到页面加载并显示之后才会触发。这将允许它异步更新更新面板(及其用户控件)。

因此,在用户控件的page_load中,我想告诉它在初始页面加载期间忽略任何内容,并且只有在页面已经为用户加载之后由javascript调用它才能完成它的工作。在此用户控件中完成的工作需要几秒钟,我不希望它减慢初始页面加载速度。

有什么想法吗?

谢谢! :)

1 个答案:

答案 0 :(得分:0)

解决方案很简单 - 只需使用IsPostBack在页面加载后开始工作,因为当您使用javascript触发UpdatePanel时,您会将帖子发送回服务器。所以这样做:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        // now do your work
    }
}

为了使它更高级,您甚至可以简单地检查PostBack是否来自该面板。我用它来检查女巫UpdatePanel是触发事件的函数,所以代码我们将如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack && IsUpdatePanelInRendering(Page, upUpdatePanelId))
    {
        // run the code for update panel 1, me
        // ...
    }
}

其中IsUpdatePanelInRendering:

public static bool IsUpdatePanelInRendering(Page page, UpdatePanel panel)
{
    Debug.Assert(HttpContext.Current != null, "Where are you called ? HttpContext.Current is null ");
    Debug.Assert(HttpContext.Current.Request != null, "Where are you called HttpContext.Current.Request is null ");

    // if not post back, let it render
    if (false == page.IsPostBack)
    { 
        return true; 
    }
    else
    {
        try
        {
            // or else check if need to be update
            ScriptManager sm = ScriptManager.GetCurrent(page);

            if (sm != null  && sm.IsInAsyncPostBack)
            {
                Debug.Assert(HttpContext.Current.Request.Form != null, "Why forms are null ?");

                string smFormValue = HttpContext.Current.Request.Form[sm.UniqueID];

                if (!string.IsNullOrEmpty(smFormValue))
                {
                    string[] uIDs = smFormValue.Split("|".ToCharArray());
                    if (uIDs.Length == 2)
                    {
                        if (!uIDs[0].Equals(panel.UniqueID, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return false;
                        }
                    }
                }
            }
        }
        catch (Exception x)
        {
            Debug.Fail("Ops, what we lost here ?");
        }

        return true;
    }
}