【发布时间】:2013-10-08 19:38:22
【问题描述】:
我正在使用 asp requiredfieldvalidator。我希望仅在选中表单上的复选框时才触发必填字段验证器。
当复选框被触发时,验证器会按预期工作并显示错误消息,但是当取消选中复选框时,显示的错误消息会停留在屏幕上。我尝试了不同的选项,例如 validator.resetForm();禁用验证器,隐藏验证器但错误消息保留在屏幕表单上。这是我的代码的简化版本:
<script src="jquery-1.4.2.min.js"></script>
<!DOCTYPE html>
<script type="text/javascript">
function enableDisableControls(value) {
var enabledSilentPost = $("#<%=chkEnableSilentPost.ClientID%>").attr("checked");
var validatorControl = $("#<%=valApprovalURL.ClientID%>")[0];
ValidatorEnable(validatorControl, enabledSilentPost);
// If the checkbox is false then assume that the
if (!enabledSilentPost) {
validatorControl.enabled = false;
}
}
$(document).ready(function () {
$("#<%=chkEnableSilentPost.ClientID%>").click(function () {
enableDisableControls();
});
enableDisableControls();
});
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>
<asp:CheckBox ID="chkEnableSilentPost" runat="server" Width="250px" Text="Enable" />
<asp:Label ID="lblApprovalURL" runat="server" Text="URL" CssClass="controllabel" meta:resourcekey="lblApprovalURLResource"></asp:Label>
<asp:TextBox ID="txtApprovalURL" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="valApprovalURL" runat="server" ControlToValidate="txtApprovalURL" ErrorMessage="Please enter Valid Text" Text="*"></asp:RequiredFieldValidator>
<actk:ValidatorCalloutExtender ID="extApprovalURL" TargetControlID="valApprovalURL" runat="server" Enabled="True"></actk:ValidatorCalloutExtender>
</div>
</form>
【问题讨论】:
-
如何将检查更改事件添加到复选框并在事件内部编写以下代码:valApprovalURL.Enabled = chkEnableSilentPost.Checked;
-
点击事件中的代码就是这样做的。请注意,禁用验证控件不会清除错误消息,这就是问题所在。只是为了澄清一下,如果让我们说用户单击复选框并且没有在文本框中输入值,用户将收到一条错误消息。如果用户取消选中该复选框,那么他/她会期望错误消息消失,但事实并非如此。
-
好吧,据我所知,验证消息是通过作为客户端的 javascript 处理的,而服务器对此一无所知。将 CauseValidation="false" 放在复选框内。
-
这似乎回答了这个问题。 stackoverflow.com/questions/2915830/…