0

我的问题是关于控件 UpdatePanel。

UpdatePanel:基本上我的页面上几乎没有 UpdatePanel,它们加载网络数据的成本很高,所以有时我不需要加载所有内容,这就是为什么我想了解如何按需加载 UpdatePanel 中的内容。

使用 JQuery:UpdatePanels 的加载应该通过 JQuery 函数调用进行,所以我不知道如何,但是使用 JQuery 我应该能够说“LoadUpdatePanel(“idOfUpdatePanel”)”并且它应该加载它的内容。

知道如何通过使用 UpdatePanel 和 JQuery 来解决这个问题,或者我应该在哪个方向进行调查?

4

1 回答 1

0

你不能用 UpdatePanel 做到这一点。UpdatePanel 会自动连接所有的帖子数据,包括视图状态,以及后面的代码。

您不能只获得一个 UpdatePanel 就运行后面的代码,必须运行整个循环。

你可以做什么

您可以通过检查请求是否来自同一个 UpdatePanel 来避免在某些函数后面运行代码。

例如,假设您有 4 个更新面板,并且更新面板 2 被回发。然后在页面加载的其余更新面板上,您可以执行类似的操作

protected void Page_Load(object sender, EventArgs e)
{
    if (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;
    }
}

相对:
如何限制 UpdatePanel 上的帖子值数量?
如何防止用户控制代码在异步回发中运行?

直接ajax调用

更好但困难的解决方案是删除 UpdatePanel,并使用 ajax 调用手动进行更新。

在这种情况下,您可以使用 jQuery 和部分发送、部分更新页面上的任何内容,以最低的数据发送和操作成本 - 但具有更多的代码和设计。

于 2012-11-13T16:00:17.910 回答