C# 如何隐藏asp自定义验证程序的错误消息

C# 如何隐藏asp自定义验证程序的错误消息,c#,asp.net,C#,Asp.net,我正在使用asp requiredfieldvalidator。我希望所需的字段验证器仅在选中表单上的复选框时启动 当复选框被激发时,验证程序将按预期工作,并显示错误消息,但当复选框被取消选中时,显示的错误消息将保留在屏幕上。我尝试了不同的选项,如validator.resetForm();禁用验证程序,隐藏验证程序,但错误消息保留在屏幕窗体上。以下是我的代码的简化版本: <script src="jquery-1.4.2.min.js"></script> <!D

我正在使用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>

功能启用禁用控件(值){
var enabledSilentPost=$(“#”)attr(“选中”);
var validatorControl=$(“#”)为[0];
ValidatorEnable(validatorControl,enabledSilentPost);
//如果复选框为false,则假定
如果(!enabledSilentPost){
validatorControl.enabled=false;
}
}
$(文档).ready(函数(){
$(“#”)单击(函数(){
启用禁用控件();
});
启用禁用控件();
});

我能够通过执行以下操作让验证器做出反应。验证器非常简单,但我必须预测扩展器的ID才能工作:

<script type="text/javascript">
        $(function () {
            $('#<%=chkEnableSilentPost.ClientID %>').click(function () {
                $("#<%=valApprovalURL.ClientID %>").toggle(this.checked);
                $("#extApprovalURL_popupTable").toggle(this.checked);
            });
        });

    </script>
    <form id="form1" runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
        <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>
            <asp:ValidatorCalloutExtender ID="extApprovalURL" TargetControlID="valApprovalURL" runat="server" Enabled="True"></asp:ValidatorCalloutExtender>
        </div>
    </form>

$(函数(){
$('#')。单击(函数(){
$(“#”).toggle(this.checked);
$(“#extApprovalURL_popupTable”).toggle(选中此项);
});
});

如何将check change事件添加到复选框中,并在事件内部编写以下代码:valApprovalURL.Enabled=chkEnableSilentPost.Checked;单击事件中的代码正是这样做的。请注意,禁用验证控件不会清除错误消息,这就是问题所在。只是为了澄清一下,如果假设用户单击复选框,但没有在文本框中输入值,用户将收到一条错误消息。如果用户取消选中该复选框,那么他/她会希望错误消息消失,但事实并非如此。据我所知,验证消息是通过客户端javascript处理的,而服务器对此一无所知。将CauseValidation=“false”置于复选框内。这似乎可以回答问题。我不想要回邮。我希望验证只在客户端工作。请参阅我对irfan回复的评论。该解决方案可行,但需要猜测才能获得popupTable的id。我想知道是否有其他方法可以不需要猜测就可以访问弹出表,比如验证程序控件上的某个属性可以访问弹出表。我查看了一下,没有找到。如果您找到了,请告诉我:)