为什么更新面板会为自定义控件执行完整的回发?

时间:2009-03-05 22:12:11

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

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

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

    <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 个答案:

答案 0 :(得分: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方法的?这包括嵌入在自定义控件中的更新面板。

答案 1 :(得分:1)

找出类似问题的解决方案:How can I get an UpdatePanel to intercept a CompositeControl's DropDownList

除了我的控件导致回发是在一个带有完整回发触发器的updatepanel中。我能够将控制权拉出来,因此它没有在更新面板中嵌套并解决了它。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-3)

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

您可能还想探索UpdateMode property,它确定哪种事件会触发更新。 (默认情况下,如果屏幕上的任何其他面板都刷新,UpdatePanel将会刷新。这让我感到很沮丧,直到我意识到发生了什么。)