子UpdatePanel和父UpdateProgress问题

时间:2010-11-23 15:56:41

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

我有一个嵌套的子级和父级UpdatePanel。问题是,当刷新/发布子UpdatePanel时,父级中的UpdateProgress将启动。我怎么能阻止这个?结构是这样的:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>

        <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                    <ProgressTemplate></ProgressTemplate>
        </asp:UpdateProgress>

        <asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
                    <ProgressTemplate></ProgressTemplate>
        </asp:UpdateProgress>

        <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:UpdateProgress ID="UpdateProgress3" runat="server" AssociatedUpdatePanelID="UpdatePanel2">
                                    <ProgressTemplate></ProgressTemplate>
                                </asp:UpdateProgress>
            </ContentTemplate>
                </asp:UpdatePanel>

        </ContentTemplate>
</asp:UpdatePanel>

发布UpdatePanel2时,UpdateProgress3未显示,UpdateProgress1UpdateProgress2。我该怎么办?

2 个答案:

答案 0 :(得分:1)

未指定UpdatePanel1的{​​{3}}属性,因此默认为Always,这意味着当{1}}上的任何其他UpdatePanel1时,UpdatePanel将被刷新页面执行部分回发。

尝试在所有UpdateMode="Conditional"中指定UpdatePanels

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
</asp:UpdatePanel>

答案 1 :(得分:1)

见到这里:http://www.asp.net/AJAX/Documentation/Live/overview/UpdateProgressOverview.aspx

  

如果UpdatePanel控件位于另一个更新面板中,则源自子面板内部的回发将导致显示与子面板关联的任何UpdateProgress控件。 它还显示与父面板关联的任何UpdateProgress控件。如果回发源自父面板的直接子控件,则仅显示与父面板关联的UpdateProgress控件。这遵循了如何触发回发的逻辑。

所以,我认为你必须隐藏父UpdateProgress客户端:

  

您可以使用PageRequestManager类的JavaScript beginRequest和endRequest事件以编程方式控制何时显示UpdateProgress控件。在beginRequest事件处理程序中,显示表示UpdateProgress控件的DOM元素。在endRequest事件处理程序中,隐藏元素。