为什么更新面板会为自定义控件执行完整的回发?
-
03-07-2019 - |
题
我有一个相当复杂的自定义控件 - 自定义控件中有几个更新面板。
我正在尝试在更新面板中使用这样的控件:
<asp:UpdatePanel ID="up1" runat="server">
<ContentTemplate>
<asp:Button ID="btn1" runat="server" Text="Sample Button" /> <asp:Label ID="lblTime" runat="server"></asp:Label>
<cc1:MyCustomControl ID="MyCustomControl1" runat="server" >
</cc1:MyCustomControl>
</ContentTemplate>
</asp:UpdatePanel>
当我点击更新面板中的按钮时,它会执行异步回发,并且没有屏幕“闪烁”。当我单击自定义控件中的按钮时,页面会闪烁并返回完整的帖子。
在自定义控件中,有一些更新面板正在尝试执行完全回发(基于触发器)。
如果自定义控件内部有什么内容,我怎样才能使页面级别的UpdatePanel不进行完整的回发?
解决方案 2
找出类似问题的解决方案:如何让UpdatePanel拦截CompositeControl的DropDownList
除了我的控件导致回发是在一个带有完整回发触发器的updatepanel中。我能够将控制权拉出来,因此它没有在更新面板中嵌套并解决了它。
其他提示
您是否考虑过使用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方法的?这包括嵌入在自定义控件中的更新面板。
我首先看看自定义控件是否存在导致整页回发的其他问题,因为在任何情况下应该发生的是整个更新面板刷新(仍然使用ajax)。
之后,只需看看这个的Nesting UpdatePanel Controls部分: http://msdn.microsoft.com/en-us/library/bb398867的.aspx#
还要确保将ScriptManager控件的属性EnablePartialRendering设置为true。
在UpdatePanel上,设置属性 ChildrenAsTriggers =&quot; true&quot;
。这告诉UpdatePanel拦截源自UpdatePanel内部的所有 PostBack调用。
您可能还想探索 UpdateMode属性,确定触发更新的事件类型。 (默认情况下,如果屏幕上的任何其他面板都刷新,UpdatePanel将会刷新。这让我感到很沮丧,直到我意识到发生了什么。)