我正在尝试使用 CustomValidator 来验证字符串的输入-邮政信箱
基本上,我希望用户避免在我用正则表达式编写函数的地址框中键入他们的邮政地址。但是问题是尽管触发了功能,但错误消息没有出现。 (我知道这一点是因为我通过使用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之间的距离如何增加。)
在Java脚本方面,下面是函数
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;
}
答案 0 :(得分:0)
我找到了解决问题的方法。经过数天的尝试,错误和研究,这对我很有效:
<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 标记中放置错误消息似乎不起作用的原因。如果我在某个地方出错,请随时纠正我。但是,如果您遇到类似情况,我的解决方案应该会有所帮助。