ASP.NET按钮单击事件未触发

时间:2011-10-06 10:12:39

标签: javascript jquery .net asp.net

我在div中有一个按钮,默认情况下是隐藏的,因为它被jQuery UI用作模式弹出窗口。

此按钮的click事件处理程序永远不会被调用,但如果我将按钮代码复制到此隐藏div之外,则它可以正常工作。我该如何解决这个问题?

这是我到目前为止的代码:

<div id="dialog" title="Notify Users">
    <div style="width:100%; height:500px; overflow:auto;">
       <asp:Repeater runat="server"  ID="rptNotify">
          <HeaderTemplate>
             <table>
          </HeaderTemplate>
          <ItemTemplate>
             <tr>
                <td>
                   <asp:CheckBox ID="chkUser" runat="server" Checked='<%# Eval("Checked") %>' />
                </td>
                <td>
                   <asp:Label ID="lblUser" runat="server" Text='<%# Eval("FullName") %>'/>
                </td>
             </tr>
          </ItemTemplate>
          <FooterTemplate>
             </table>
          </FooterTemplate>
       </asp:Repeater>
    </div>
    <asp:Button ID="btnSaveNotifications" runat="server" Text="Save" OnClick="btnSaveNotifications_Click" />
 </div>

显示/隐藏此div的代码是:

<script>
     // Increase the default animation speed to exaggerate the effect
     $.fx.speeds._default = 1000;

     $(function () {
        $("#dialog").dialog({
           autoOpen: false,
           show: "blind",
           hide: "explode"
        });

        $("#opener").click(function () {
           $("#dialog").dialog("open");
           return false;
        });
     });
</script>

3 个答案:

答案 0 :(得分:12)

这里的问题是jQuery-UI创建了<form>元素的外部对话框,因此点击它永远不会提交表单。

要解决此问题,您可以将对话框<div>移回表单,而不是手动创建点击事件。我做了一个快速搜索,答案to this question已经涵盖了这个问题。

所以你只需要做出这个改变:

<script>
     // increase the default animation speed to exaggerate the effect
     $.fx.speeds._default = 1000;

     $(function () {
        var dialog = $("#dialog").dialog({
                        autoOpen: false,
                        show: "blind",
                        hide: "explode"
                     });

        // Move the dialog back into the <form> element
        dialog.parent().appendTo(jQuery("form:first"));

        $("#opener").click(function () {
           $("#dialog").dialog("open");
           return false;
        });
     });
</script>

答案 1 :(得分:1)

转变将是将您的按钮事件更改为客户端事件,然后从客户端触发服务器端事件。

请参阅Stack Overflow问题 How to fire a button click event from JavaScript in ASP.NET

答案 2 :(得分:0)

请注意,在对话框中使用iFrame时会产生分歧。移动带有iFrame的div会导致iFrame发布两次或更多次。如果你已经实现了这个,我会检查你的情况是否属实。我发布了一个我在这里找到的解决方法:https://stackoverflow.com/a/24663205/3334255