页面上的所有UpdatePanel都在__doPostBack上更新

时间:2012-01-04 01:09:17

标签: asp.net asp.net-ajax updatepanel

当在页面上有多个UpdatePanel时,尝试通过JavaScript更新UpdatePanel时遇到关闭行为。

会尽量保持简短:

  • 我已将UpdateMode设置为Conditional
  • 我将UpdatePanel的正确ClientID传递到__EventTarget
  • 在代码隐藏中,我成功找到了目标控件

但由于某种原因,页面上每个UpdatePanel的OnLoad都会被触发。

以下是一段代码 - 任何想法为什么会这样?

Ascx:

<div class="updatePanelWrapper">
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" RenderMode="Inline" OnLoad="UpdatePanel1Load"
    runat="server">
    <ContentTemplate>
        <asp:Panel ID="Panel1" runat="server">
        </asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>
</div>
<div class="updatePanelWrapper">
<asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" RenderMode="Inline" OnLoad="UpdatePanel2Load"
    runat="server">
    <ContentTemplate>
        <div>
            <asp:Panel ID="Panel2" runat="server">
            </asp:Panel>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>
</div>

代码隐藏:

protected void UpdatePanel1Load(object sender, EventArgs e)
{
    UpdatePanelLoad(sender, e);
}

protected void UpdatePanel2Load(object sender, EventArgs e)
{
    UpdatePanelLoad(sender, e);
}

protected void UpdatePanelLoad(object sender, EventArgs e)
{
    // if only a async postback then load the control
    if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack)
    {
        // Some Logic ...
    }
}

JavaScript(我在触发ASYNC PostBack的地方):

var updatePanelWrappers = $(".updatePanelWrapper");
var availableWrapper = updatePanelWrappers[0];
var updatePanelElement = $(availableWrapper).children()[0];
var updatePanelId = $(updatePanelElement).attr("id");

window.__doPostBack(updatePanelId, "Some Arguments...");

1 个答案:

答案 0 :(得分:0)

使用UpdatePanel回调,页面仍然会经历其生命周期的大部分时间;其中包括所有Load事件。