2

次のJavaScriptコードを使用して、ページが読み込まれた後に更新パネルの更新を呼び出します。

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

ページが読み込まれて表示されるまで、更新パネル(ユーザーコントロールが含まれている)を起動したくありません。これにより、更新パネル(およびそのユーザーコントロール)を非同期で更新できるようになります。

そのため、ユーザーコントロールのpage_loadで、最初のページの読み込み中には何も無視し、ユーザーのページが既に読み込まれた後にjavascriptによって呼び出された場合にのみ機能するように指示します。このユーザーコントロールで行われる作業には数秒余分にかかるので、最初のページの読み込みを遅くしたくありません。

何かご意見は?

ありがとうございました!:)

4

1 に答える 1

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;
    }
}
于 2012-12-15T05:49:12.823 に答える