2

次の 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>

ASP.NETボタンの代わりにポストバックを実行するために、jQuery.dialogで生成されたボタンを取得しようとしています。btnSave_Clickボタンにサブミットを実行させ、メソッドを呼び出すにはどうすればよいですか?


編集

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

...動作しますが、これが最善の解決策ですか?

4

2 に答える 2

5
$("#<%=btnSave.ClientID %>").click();
于 2010-07-28T15:38:45.000 に答える
4

btnSave.ClientId プロパティを使用して、探しているコントロールの ID を JavaScript に送信すると、次のようなことができます。これは、btnSave コントロールをポストバック コントロールとして登録し、コード ビハインドで「クリック」イベントをトリガーする場合です。

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 の作成方法を選択できます。ボタンの ID を JavaScript にハードコーディングできるように、Predictable または Static オプションを使用できます。

于 2010-07-28T15:31:42.457 に答える