自定义验证器 - 前端不显示错误消息

Custom Validator - Error message does not display on front end

我正在尝试使用 CustomValidator 来验证字符串的输入 - po box

基本上,我希望用户避免在我用正则表达式编写函数的地址框中键入他们的邮政地址。但问题是虽然它触发了功能,但错误信息并没有出现。 (我知道这一点是因为我通过使用 Chome 开发人员工具在我的 Javascript 函数中放置断点来检查这一点。)

下面是我的 .ascx 文件代码。

<div class="clearfix">
     <asp:Label ID="lblAddress" runat="server" Text="Address" AssociatedControlID="txtAddress"
     class="formlabel firstfocus"></asp:Label>

     <div class="input">
       <asp:TextBox ID="txtAddress" runat="server" CssClass="large" MaxLength="80"></asp:TextBox>

          <asp:RequiredFieldValidator ID="valAddress" runat="server" ControlToValidate="txtAddress"
            CssClass="error-block" Display="Dynamic" ErrorMessage="<p>Address is required</p>"
            SetFocusOnError="True"></asp:RequiredFieldValidator>

           <asp:CustomValidator ID="valAddressPOBOX" runat="server" EnableClientScript="true" ValidateEmptyText="true" ErrorMessage="<p>Cannot contain a PO Box number</p>" ClientValidationFunction="AddressPOBoxValidation" ControlToValidate="txtAddress" Display="Dynamic" SetFocusOnError="True"></asp:CustomValidator>                                    

      </div>
</div>

RequiredFieldValidator 触发错误信息。

下面是显示从 RequiredFieldValidator

触发的错误消息的屏幕截图

使用 CustomValidator 会触发,但不会出现错误消息。我检查了同一 ascx 页面上的其他 CustomValidator,并确保这个具有与它们没有区别的属性,但是,如果我在任何可见性上遗漏 属性,请随时纠正我。

下面是 2 个屏幕截图,显示 CustomValidator 的效果如何发生。

进入邮政信箱前

进入邮政信箱后(注意地址和地址2之间的差距是如何增加的。)

来到Javascript这边,下面是函数

function CheckPOBOXAddress(address) {
    var poboxPattern = /(p\.?\s?o?\.?\s?b\.?(ox)\.?(\s|[0-9])?|post\soffice)/i;


    if (poboxPattern.test(address))
        return true;
    else
        return false;
}

function AddressPOBoxValidation(sender, args) {
    var address = args.Value;

   if (CheckPOBOXAddress(address)) {
        args.IsValid = false;
        return;
    } 

    args.IsValid = false;
}

经过 problem.After 天的试验、错误和研究,我找到了解决方案,这对我有用:

<asp:CustomValidator ID="CustomAddressValidator" runat="server" ClientValidationFunction="CheckAddressValidation" ControlToValidate="txtAddress" CssClass="error-block" Display="Dynamic" SetFocusOnError="True">Cannot contain a PO Box number</asp:CustomValidator>

我也将 Javascript 修改为一个函数 :

function CheckAddressValidation(sender, args) {
    var address = args.Value;
    var addressPattern = /(p\.?\s?o?\.?\s?b\.?(ox)\.?(\s|[0-9])?|post\soffice)/i;
    if (addressPattern.test(address)) {
        args.IsValid = false;
        return;
    }
    args.IsValid = true;
}

课程 - CreateProfile.ascx文件的另一部分有自定义验证器的格式与我最初发布的格式相同。我的上级觉得微软对此做了一些更改,这可能就是为什么在 ErrorMessage 标记中放置错误消息似乎不起作用的原因。如果我在某个地方错了,请随时纠正我。但是,如果您遇到类似情况,我的解决方案应该有所帮助。