是否可以让更新面板内的控件不会导致回发并仅通过触发器更新控件。 我已经尝试添加标签“触发器”,但在我对其进行操作后控件仍在更新。
<td>
<asp:UpdatePanel ID="UpdatePanel7" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<uc1:CBP runat="server" ID="C1" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="C2" />
</Triggers>
</asp:UpdatePanel>
</td>
答案 0 :(得分:1)
您还需要确保ChildrenAsTriggers
属性设置为false
,否则您的更新面板可以由其子级以及已定义的触发器触发。此属性的默认值为true
,它解释了行为:
<asp:UpdatePanel ID="UpdatePanel7" runat="server"
UpdateMode="Conditional"
ChildrenAsTriggers="false">
这也可以在docs:
中找到如果UpdateMode属性设置为Conditional,则其中一个 发生以下情况:... ChildrenAsTriggers属性是 设置为true并且UpdatePanel控件的子控件导致a 回发。嵌套的UpdatePanel控件的子控件不会 导致更新外部UpdatePanel控件,除非它 明确定义为触发器。
答案 1 :(得分:0)
这完全取决于你如何设置它。如果您有一个位于更新面板之外的Control,那么Control将对整个页面进行回发。
示例:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="smDefault" runat="server" />
<asp:UpdatePanel ID="upnlTime" runat="server" RenderMode="Block" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lblTime" runat="server" />
<br />
<asp:Button ID="btnInsideUpdate" runat="server" Text="Update from Inside" OnClick="btnInsideUpdate_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnInsideUpdate" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upnlOutside" runat="server" RenderMode="Block" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnOutsideUpdate" runat="server" Text="Update from outside" OnClick="btnOutsideUpdate_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnOutsideUpdate" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<br />
<asp:Button ID="btnUpdatePage" runat="server" Text="Update Page" OnClick="btnUpdatePage_Click" />
</div>
</form>
btnInsideUpdate将更新updatepanel的内容,btnUpdatePage也是如此,但btnOutsideUpdate将不会更新,因为它位于Another update面板中。