发生部分更新后,是什么原因导致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>
- 当在更新面板内首次触发任何按钮时,以下程序按照此顺序运行。
- 在发生 postback 后,再次触发按钮会导致 postback,同时触发
Load
和PreRenderComplete
事件,但 click 事件会被跳过。
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"
吗? - hardkodedupPan
没有更新(upPan.Update()
),那么控件就会失去它们的事件监听器。 - Hugo Yates