【发布时间】:2018-02-26 19:14:57
【问题描述】:
发生部分更新后,什么会导致 asp 按钮不触发?
<asp:UpdatePanel ID="upPan" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnSave" ClientIDMode="Static" runat="Server" Text="Save" CausesValidation="false" />
</ContentTemplate>
</asp:UpdatePanel>
- 第一次在更新面板内触发任何按钮时,以下例程将按此顺序触发。
- 在发生回发后,再次触发按钮会导致回发,
Load和PreRenderComplete事件都会触发,但会跳过点击事件。
VB
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.PageLoad
//Runs everytime
End Sub
Protected Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
//Doesn't fire after first postback.
End Sub
Protected Sub Page_PreRenderComplete(sender As Object, e As EventArgs) Handles Me.PreRenderComplete
//Runs everytime
End Sub
失败的解决方案
解决此问题的建议包括:
-
ChildrenAsTriggers= "True"这已经是 UpdatePanel 的默认行为,不会提供任何更改。 -
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />同样默认情况下,面板的子控件会导致异步回发,并且声明触发器是多余的。
成功解决
如果我只是将asp:Button 更改为asp:LinkButton,问题就解决了。
摘要
正在发生回发,但当发送方是 asp:Button 控件时,点击事件丢失。
谁能解释导致这种行为的原因?
【问题讨论】:
-
您可以尝试在标记中设置
OnClick="btnSave_Click"吗? -
@NikolaosPolygenis 感谢您提供的任何帮助,但我在问题中概述了您发布的答案不起作用,甚至不正确。
-
一目了然:如果
upPan未更新 (upPan.Update()) 回发后,因此控件会松开其事件侦听器。 -
@HugoYates 如果我错了请纠正我,但更新面板内触发的回发不会自动导致面板更新?
标签: c# asp.net vb.net updatepanel postback