Пользовательский валидатор — сообщение об ошибке не отображается во внешнем интерфейсе

#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, похоже, не работает. Не стесняйтесь поправлять меня, если я где-то ошибаюсь. Но если вы тот, кто застрял в подобной ситуации, мое решение должно помочь.