#javascript #asp.net-mvc-4 #customvalidator
#javascript #asp.net-mvc-4 #пользовательский валидатор
Вопрос:
Я пытаюсь использовать пользовательский валидатор для проверки ввода строки — po box
В принципе, я хочу, чтобы пользователи не вводили свой почтовый адрес в поле адреса, для которого я написал функцию с регулярным выражением. Но проблема в том, что сообщение об ошибке не отображается, хотя оно запускает функцию. (Я знаю это, потому что я проверил это, установив точки останова в моей функции Javascript с помощью инструментов разработчика Chome.)
Ниже приведен код моего файла .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 и убедился, что этот имеет свойства, ничем не отличающиеся от них, но все же, если мне не хватает какого-либо свойства видимости, не стесняйтесь меня поправлять.
Ниже приведены 2 скриншота, показывающие, как происходит действие CustomValidator.
Перед вводом почтового ящика
После ввода почтового ящика (обратите внимание, как увеличивается разрыв между адресом и адресом 2.)
Переходя к стороне Javascript, ниже приведена функция
function CheckPOBOXAddress(address) {
var poboxPattern = /(p.?s?o?.?s?b.?(ox).?(s|[0-9])?|postsoffice)/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;
}
Ответ №1:
Я нашел решение своей проблемы.После нескольких дней проб, ошибок и исследований это сработало для меня:
<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])?|postsoffice)/i;
if (addressPattern.test(address)) {
args.IsValid = false;
return;
}
args.IsValid = true;
}
Урок — Другая часть файла CreateProfile.ascx содержит пользовательский валидатор в том же формате, который я опубликовал изначально. Мое начальство считает, что Microsoft внесла в это некоторые изменения, вероятно, именно поэтому добавление сообщения об ошибке в тег ErrorMessage, похоже, не работает. Не стесняйтесь поправлять меня, если я где-то ошибаюсь. Но если вы тот, кто застрял в подобной ситуации, мое решение должно помочь.