【问题标题】:How to Hide error message of a asp custom validator如何隐藏asp自定义验证器的错误消息
【发布时间】: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/…

标签: c# asp.net


【解决方案1】:

我能够通过执行以下操作让验证器做出反应。 Validator 非常简单,但我必须预测 Extender 的 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>

【讨论】:

  • 我不想要回发。我希望验证仅在客户端工作。请参阅我的 cmets 对 irfan 的回复。
  • 该解决方案有效,但需要猜测才能获得 popupTable 的 id。我想知道是否有另一种方法可以在没有猜测的情况下进入弹出表,比如验证器控件上可以获取弹出表的某些属性。
  • 我看了看,没找到。如果你找到了请告诉我:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2012-10-30
相关资源
最近更新 更多