3

我有一个相当复杂的自定义控件 - 自定义控件中有几个更新面板。

我正在尝试在更新面板中使用这样的控件:

    <asp:UpdatePanel ID="up1" runat="server">
    <ContentTemplate>
     <asp:Button ID="btn1" runat="server" Text="Sample Button" />&nbsp;&nbsp;<asp:Label ID="lblTime" runat="server"></asp:Label>    
     <cc1:MyCustomControl ID="MyCustomControl1" runat="server" >
    </cc1:MyCustomControl>
    </ContentTemplate>
</asp:UpdatePanel>

当我单击更新面板中的按钮时,它会执行异步回发并且没有屏幕“闪烁”当我单击自定义控件中的按钮时,页面会闪烁并执行完整回发。

在自定义控件内部,有一些更新面板正在尝试执行完整的回发(基于触发器)。

无论自定义控件内部发生什么,如何使页面级别 UpdatePanel 不执行完整回发?

4

4 回答 4

2

您是否考虑过在 up1 UpdatePanel 控件中使用 btn1 控件显式设置 asp:AsyncPostBackTrigger。

<asp:UpdatePanel ID="up1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btn1" EventName="Click" />
    </Triggers>
    <ContentTemplate>     
        <asp:Button ID="btn1" runat="server" Text="Sample Button" />  
        <asp:Label ID="lblTime" runat="server"></asp:Label>         
        <cc1:MyCustomControl ID="MyCustomControl1" runat="server" />                 
    </ContentTemplate>
</asp:UpdatePanel>

编辑: 您如何尝试在更新面板的按钮的 OnClick 事件中显式调用 Update 方法?这包括嵌入在自定义控件中的更新面板。

于 2009-03-05T23:53:51.873 回答
1

想出了与此类似的解决方案: 如何让 UpdatePanel 拦截 CompositeControl 的 DropDownList

除了我导致回发的控件位于具有完整回发触发器的更新面板中。我能够将该控件拉出,因此它没有嵌套在更新面板中并解决了它。

于 2009-03-06T00:58:57.427 回答
0

我会首先查看导致整个页面回发的自定义控件是否存在其他问题,因为无论如何应该发生的是整个更新面板刷新(仍然使用 ajax)。

之后,只需查看其中的 Nesting UpdatePanel Controls 部分:http: //msdn.microsoft.com/en-us/library/bb398867.aspx#

还要确保将属性 EnablePartialRendering 设置为 true 的 ScriptManager 控件。

于 2009-03-05T23:40:22.563 回答
-3

在 UpdatePanel 上,设置属性ChildrenAsTriggers="true"。这告诉 UpdatePanel 拦截源自 UpdatePanel 内部的所有PostBack 调用。

您可能还想探索UpdateMode 属性,它决定了触发更新的事件类型。(默认情况下,如果屏幕上的任何其他面板被刷新,UpdatePanel 将刷新。这让我呆了一会儿,直到我意识到发生了什么。)

于 2009-03-05T23:33:49.177 回答