ASP.Net复选框确认消息不起作用

本文关键字:消息 不起作用 确认 复选框 Net ASP | 更新日期: 2023-09-27 18:24:06

我有一个复选框,希望在点击时显示确认消息

我在代码隐藏文件中添加了事件绑定,如下所示。

chkSMTLock.Attributes.Add("onclick", "return ConfirmSMTLock();");

以下是我为chkSMTLock编写的HTML代码

<asp:CheckBox ID="chkSMTLock" runat="server" AutoPostBack="true" OnCheckedChanged="chkSMTLock_CheckedChanged" Text="SMT Lock" />

这是我的javascript:

function ConfirmSMTLock() {
        var r = confirm('Are you sure that you want to SMT lock/unlock this account?');
        console.log(r);
        return r;
    }

当我运行它时,我可以在浏览器控制台日志中看到确认值(true/false),但它没有调用任何服务器端代码。

我的服务器端代码在日志记录方面非常简单。。。

protected void chkSMTLock_CheckedChanged(object sender, EventArgs e)
    {
        Utils.Debug("chkSMTLock_CheckedChanged");
    }

当我删除复选框的javascript事件绑定时,它会成功执行ServerSide事件。但当我把它放回去时,它就停止工作了。

如何使用确认消息框来控制它?

ASP.Net复选框确认消息不起作用

您的验证太落后了。由于您的AutoPostBack=true,您基本上是在单击复选框时提交表单,您的验证希望在表单级别。

Form.Attributes.Add("onclick", "return ConfirmSMTLock();");

在ConfirmSMTLock()中,检查复选框的状态,看看是否需要启动确认对话框。这是我能想到的最简单的方法。

附带说明:如果你这样做:

chkSMTLock.Attributes.Add("onclick", "return false;");

复选框变为不可勾选

我找到了答案。由于AutoPostBack=true,它将自动将邮件发送回服务器。因此,首先需要从html代码中删除该属性。

<asp:CheckBox ID="chkSMTLock" runat="server" OnCheckedChanged="chkSMTLock_CheckedChanged" Text="SMT Lock" />

然后使用ASP.Net.的__doPostBack函数实现PostBack行为

function ConfirmSMTLock() {
        var r = confirm('Are you sure that you want to SMT lock/unlock this account?');
        if (r == true)
        {
            __doPostBack("chkSMTLock", '');            
            return true;
        }
        return false;
    }

打开Sasame!!!