商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ASP.NET中Onclick与OnClientClick遇到的问题

ASP.NET中Onclick与OnClientClick遇到的问题

  发布于2026-07-23 阅读(0)

扫一扫,手机访问

在ASP.NET中,处理按钮点击时经常会遇到OnClientClickOnClick这两个家伙。一个在前端(js文件里跑),一个在后端(cs文件里处理)。别看它们名字相似,执行顺序和逻辑关系可大有讲究。

先看一个典型的按钮声明:


这里的设计意图很明确:通过OnClientClick的返回值来决定是否触发服务器端的OnClick事件。如果JS返回true,就执行后台代码;返回false,则取消提交。一开始很多人会这么写:

function GenerateQuote() {
    alertlConfirm(_c.toMessage('提示:是否XXX?'), function () {
        return true;
    }, function () {
        return false;
    });
    return false;
}

结果发现,不管用户怎么选,后台的OnClick始终没有被执行——因为最后一行直接返回了false。注意,如果不写最后那个return false,默认返回值是true,那就等于没做判断,直接提交了。

问题出在哪里?Ja vaScript是单线程的!alertlConfirm这类带回调的弹窗,并不会阻塞后续代码的执行。也就是说,return false在回调函数还没执行完的时候就已经被弹出了,所以根本不会等待用户的选择。

解决方案其实不复杂——把真正的提交逻辑放到回调函数里,利用__doPostBack手动触发服务器端事件:

function GenerateQuote() {
    alertlConfirm(_c.toMessage('提示:是否XXX?'), function () {
        // 第一个参数是按钮的UniqueID,第二个参数是OnClick方法名
        __doPostBack("btnGenerateQuote", 'btnGenerateQuote_Click');
        return true;
    }, function () {
        return false;
    });
    return false;
}

这样,只有当用户确认时,才会通过__doPostBack提交表单,并触发指定的服务器端事件。如果用户取消,则什么都不做。值得注意的是,__doPostBack的第一个参数必须是按钮的UniqueID(通常就是控件ID),第二个参数是事件参数,这里传入了方法名,但实际上ASP.NET会忽略第二个参数,只要触发回发即可。不过按照惯例,写成对应的事件名有助于代码可读性。

最后补充一点:OnClientClick中返回false是为了阻止默认的提交行为,而真正的手动提交由__doPostBack完成。这个模式在处理需要用户确认的异步弹窗时非常实用,值得记住。

本文转载于:https://www.jb51.net/aspnet/339801rfo.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注