jQuery不会在UpdatePanel

时间:2016-12-14 12:48:12

标签: jquery asp.net

我有一个带有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做同样的事情。

我试过了:

  • 用.trigger代替.click()(&#39;点击&#39;)
  • 将ChildrenAsTriggers设置为true
  • 使用ClientID选择按钮

一切都无济于事。那么这里发生了什么?为什么我可以触发一个按钮而不是另一个按钮的点击事件?

1 个答案:

答案 0 :(得分:0)

您的错误在于您错过了选择器开头的 # 符号,该符号指定使用Id选择器,并且无法保证在控件呈现后它将具有 Button2 作为浏览器上的客户端ID,除非您将 ClientIDMode 设置为静态,但我不会建议您这样做。

更好的方法是使用Control的ClientID Property,如果您删除按钮或更改它的名称,将来会导致编译时错误,使用魔术字符串会使客户端代码失败:

$('#<%= Button2.ClientID %>').click();