截取Button回发的最佳方法

use*_*119 6 javascript asp.net page-lifecycle event-handling

我已经看到过像这样的其他解决方案非常简单,但如果javascript函数不仅仅是做confirm('sure?');什么呢?我永远不知道什么时候会回归布尔.

所以我决定实现我的所有 ASP.NET按钮:

<button id="btnDelete" name="btnDelete" class="btn">Delete</button>
<asp:Button ID="_btnDelete" runat="server" OnClick="_btnDelete_Click" style="display:none;" />

$('#btnDelete').click(function (e) {
    $.blockUI({ message: $('#divConfirmDeleteModal'), overlayCSS: { cursor: 'default' }, css: { cursor: 'default' }, baseZ: 5555 });
    return false;
});

$('#btnDeleteYes').click(function () {
    $('#<%=_btnDelete.ClientID%>').trigger('click');
});

$('#<%=_btnDelete.ClientID%>').click(function (e) { 
    // the delay happens here. if i put an alert here, it fires,
    // but then the page just loads until eventually the method gets called
    <%= ClientScript.GetPostBackEventReference(_btnDelete, string.Empty) %>; 
});
Run Code Online (Sandbox Code Playgroud)

..它一直运作良好,直到现在.我在IE中遇到问题(甚至是版本10) - _btnDelete_Click点击最终触发它的按钮后,最多需要2分钟才能调用.

感觉太hacky,我想知道是否有更好的方法.

编辑: 是另一种"正确"的方法,但我希望能够使用更高级的模态对话框并在"是"点击时返回true,而不是使用浏览器的本机确认对话框.

edit2:我想我要问的是,有没有办法为一个OnClientClick函数返回一个bool来做一个以上的事情

Win*_*Win 3

如果您在客户端脚本中手动触发单击事件,您的应用程序将无法通过移动浏览器的“Go”按钮正常运行。

以下是如何拦截按钮的服务器端点击事件,而无需在客户端手动触发它。

<script type="text/javascript">
    function clientClick() {
        if (confirm("Are you sure you want to delete?")) {
            // Do something at client side before posting back to server
            return true;
        }
        return false;
    }
</script>

<asp:Button runat="server" ID="DeleteButton" Text="Delete" 
    OnClick="DeleteButton_Click" OnClientClick="return clientClick();" />
Run Code Online (Sandbox Code Playgroud)

您可以使用 ASP.Net MVC 做很多奇特的事情。然而,它们在传统的 ASP.Net 中造成了很多问题。