我有一个带有UpdatePanel的简单页面和两个按钮:
<asp:Button ID="Button1" runat="server" ClientIDMode="Static" Text="Search" OnClick="UpdateSearchResults" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ClientIDMode="Static" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
<asp:Button ID="Button2" runat="server" ClientIDMode="Static" Text="Search" OnClick="UpdateSearchResults" />
<asp:PlaceHolder runat="server" ID="PlaceHolder1"></asp:PlaceHolder>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
单击任一按钮应该运行&#34; UpdateSearchResults&#34;在服务器上,它将内容呈现到占位符中。手动点击任一按钮都可以正常工作 - 到目前为止一切顺利。
但是,如果我使用jQuery以编程方式触发Button2的按钮单击,例如
$("Button2").click();
然后部分回发永远不会发生,而 如果我对Button1做同样的事情。
我试过了:
一切都无济于事。那么这里发生了什么?为什么我可以触发一个按钮而不是另一个按钮的点击事件?
答案 0 :(得分:0)
您的错误在于您错过了选择器开头的 #
符号,该符号指定使用Id选择器,并且无法保证在控件呈现后它将具有 Button2 作为浏览器上的客户端ID,除非您将 ClientIDMode 设置为静态,但我不会建议您这样做。
更好的方法是使用Control的ClientID Property,如果您删除按钮或更改它的名称,将来会导致编译时错误,使用魔术字符串会使客户端代码失败:
$('#<%= Button2.ClientID %>').click();