单击jQuery对话框按钮事件中的ASP.NET按钮

时间:2010-07-28 15:29:09

标签: c# asp.net jquery jquery-dialog

我有以下ASP.NET标记:

<div id="myForm" title="My Form" style="display: none">
    <span>You can see me!</span>
    <div style="display: none">
        <asp:Button ID="btnSave" runat="server" Text="Button"
            OnClick="btnSave_Click" />
    </div>
</div>

<!-- called by an element click event elsewhere -->
<script type="text/javascript" language="javascript">
    $("#myForm").dialog({
        modal: true,
        width: 500,
        height: 200,
        resizable: false,
        buttons: {
            "Cancel": function () {
                $(this).dialog("close");
            },
            "Save": function () {
                $(this).dialog("close");
                // I want to call btnSave_Click (by DOM-clicking the button?)
            }
        }
    });
    $("#myForm").parent().appendTo("form:first");
</script>

我正在尝试使用jQuery.dialog生成的按钮来执行回发来代替ASP.NET按钮。我应该怎么做才能使按钮提交并调用btnSave_Click方法?


修改

"Save": function () {
    $(this).dialog("close");
    document.getElementById("<%=btnSave.ClientID %>").click();
}

...有效,但这是最好的解决方案吗?

2 个答案:

答案 0 :(得分:5)

$("#<%=btnSave.ClientID %>").click();

答案 1 :(得分:4)

您可以使用btnSave.ClientId属性向javascript发出您要查找的控件的ID,然后您可以执行类似的操作。这是你想让btnSave控件注册为回发控件,在后面的代码中触发“Click”事件。

var myControl = document.getElementById('theclientidgoeshere')
myControl.click();

那就行了!

如果你想做一个简单的回发,你可以做

this.document.form.submit();

但不会为按钮注册任何事件。

这是最好的吗?

对于.NET 3.5及更早版本,它是获取客户端ID的唯一“真正”安全方式。使用jQuery,您可以在_btnSave上进行部分id匹配,但我发现这对于将来的修改来说风险太大。

.NET 4.0确实引入了一个可能有用的选项。

.NET 4.0 ClientIDMode属性

在.NET 4.0中,您有一个可选的ClientIDMode属性,允许您选择如何创建客户端ID。您可以使用Predictable或Static选项,允许您将按钮的ID硬编码到JavaScript中。