[英]Make any button on the page as a trigger for an asp.net UpdatePanel other than its sibling or child postback controls
考虑以下代码片段:
<div>
<asp:Button runat="server" ID="trickyUPTrigger" Text="Tricky Update" />
<div>
<asp:Button runat="server" ID="normalUPTrigger" OnClick="normalUPTrigger_Click" Text="Normal Update" />
<asp:UpdatePanel runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="normalUPTrigger" />
</Triggers>
<ContentTemplate>
<asp:Label runat="server" ID="changeableLabel" Text="Change me"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
现在,将ID为rickyUPTrigger的按钮作为UpdatePanel的触发器。 或者,设计一种机制(可能...使用javascript?),以便在单击此按钮时UpdatePanel进行更新而不会回发整页。
如果您想在点击trickyUPTrigger
时更新UpdatePanel,可以将该按钮添加到触发器列表中:
<asp:UpdatePanel runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="normalUPTrigger" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="trickyUPTrigger" EventName="Click" />
</Triggers>
<ContentTemplate>
...
</ContentTemplate>
</asp:UpdatePanel>
更新
您询问了一些代码示例,这些示例显示了命名容器的用例,这个概念对于带有项目模板的数据绑定控件(例如GridView和ListView)以及用户控件都起作用。 在下面的示例中,我使用一个ListView,其中每个项目都是一个单独的命名容器。
如果要通过ListView项模板中的按钮触发面板的更新,则在运行时找不到触发器,并且会发生异常:
<asp:ListView ID="lstView" runat="server">
<ItemTemplate>
<asp:Button ID="anotherTrigger" runat="server" Text="This trigger cannot be found!" OnClick="anotherTrigger_Click" />
</ItemTemplate>
</asp:ListView>
<asp:UpdatePanel runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="anotherTrigger" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
根据我的测试,相反的情况(ListView项目模板中的UpdatePanel,ListView外部的触发按钮)确实起作用,这似乎与您在评论中提到的注释相矛盾:
<asp:ListView ID="lstView" runat="server">
<ItemTemplate>
<asp:UpdatePanel runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="anotherTrigger" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</ItemTemplate>
</asp:ListView>
<asp:Button ID="anotherTrigger" runat="server" Text="This trigger works!" OnClick="anotherTrigger_Click" />
最后,在ListView项模板中同时使用UpdatePanel和Trigger按钮的情况也适用:
<asp:ListView ID="lstView" runat="server">
<ItemTemplate>
<asp:Button ID="anotherTrigger" runat="server" Text="This trigger works!" OnClick="anotherTrigger_Click" />
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="anotherTrigger" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</ItemTemplate>
</asp:ListView>
您可能会注意到,在上一个示例中,我为面板设置了UpdateMode="Conditional"
。 使用此设置,面板只能通过自己的触发器进行更新。 如果该属性设置为UpdateMode="Always"
,则面板不仅会通过自己的触发器进行更新,还会通过页面中其他UpdatePanels的触发器进行更新。 默认值为UpdateMode="Always"
(如您的代码示例中一样)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.