我有一个复选框,想要在点击时显示确认信息
我在Code Behind文件中添加了事件绑定,如下所示。
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事件。但当我把它放回去时,它就会停止工作。
如何使用确认信息框来控制它?
答案 0 :(得分:1)
您的验证距离链条太远了。当你有AutoPostBack = true时,你基本上是在单击复选框时提交表单,你的验证想要在表单级别。
Form.Attributes.Add("onclick", "return ConfirmSMTLock();");
在ConfirmSMTLock()中检查复选框的状态,看是否需要触发确认对话框。这是我能想到的最简单的方式。
旁注:如果你这样做:
chkSMTLock.Attributes.Add("onclick", "return false;");
该复选框变得无法使用
答案 1 :(得分:0)
我找到了答案。由于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 !!!