我有一个相当复杂的自定义控件 - 自定义控件中有几个更新面板。
我正在尝试在更新面板中使用这样的控件:
<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不进行完整的回发?
答案 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将会刷新。这让我感到很沮丧,直到我意识到发生了什么。)