Custom Validator - сообщение об ошибке не отображается на переднем конце - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь использовать CustomValidator для проверки ввода строки - почтовый ящик

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

enter image description here

с CustomValidator срабатывает триггер, но сообщение об ошибке не появляется.Я проверил другие CustomValidators на той же странице ascx и убедился, что у этого свойства не отличаются от них, но, тем не менее, если мне не хватает какого-либо свойства видимости, не стесняйтесь исправлять меня.

Ниже приведены 2снимки экрана, показывающие, как происходит действие CustomValidator .

Перед вводом po box

enter image description here

После ввода po box (Обратите внимание, как увеличивается разрыв между адресом и адресом 2).

enter image description here

Идет дальшена стороне 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;
}

1 Ответ

0 голосов
/ 03 апреля 2019

Я нашел решение своей проблемы. После нескольких дней проб, ошибок и исследований это сработало для меня:

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

...