Вопрос

Я использую UpdatePanel и хочу поместить CompareValidator в два текстовых поля, чтобы убедиться, что введенный пользователем пароль и подтверждение совпадают.

Это работает нормально (у меня VS2008 и я использую .NET 3.5) из коробки, но есть одна небольшая проблема:

Проверка срабатывает, как только пользователь выходит из первого текстового поля, прежде чем у него появится возможность ввести текст во второе.Программно это не вызывает каких-либо РЕАЛЬНЫХ проблем (все, что происходит, — это появляется сообщение об ошибке, оно исчезает, когда они вводят подтверждение), но наши тестеры говорят, что это проблема.Он не пройдет тестирование UA, пока проверка не сработает, пока они не нажмут «Сохранить».

Как мне заставить CompareValidator не срабатывать до тех пор, пока они не введут текст в оба поля?

РЕДАКТИРОВАТЬ:

Вот пример разметки.

    <div>
        <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
        <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" /></div>    
    </div>
    <div>
        <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
        <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
    </div>
    <asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation" ControlToValidate="txtPassword" ControlToCompare="txtConfirmPassword" runat="server" ErrorMessage="Passwords do not match"></asp:CompareValidator>

Вышеупомянутое находится в элементе управления, содержащемся в ContentTemplate UpdatePanel на странице.

(Классы и стили CSS удалены для краткости)

Это было полезно?

Решение

Попробуйте переключить его так, чтобы проверка выполнялась в текстовом поле подтверждения, а не в текстовом поле пароля.Таким образом, он не сработает, пока вы не измените текстовое поле подтверждения или не отправите форму.И вы, вероятно, захотите иметь обязательный валидатор полей в текстовом поле пароля.

<div>
    <div><asp:Label runat="server" ID="lblPassword" Text="Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtPassword" size="25" />
         <asp:RequiredFieldValidator runat="server" ID="passwordRequiredValidator"
                                     ControlToValidate="txtPassword"
                                     ValidationGroup="PublishPassValidation"
                                     ErrorMessage="Password is required."  />    
    </div>    
</div>
<div>
    <div><asp:Label runat="server" ID="lblConfirmPassword" Text="Confirm Password"/></div>
    <div><asp:TextBox runat="server" TextMode="password" ID="txtConfirmPassword" size="25" /></div>
</div>
<asp:CompareValidator ID="CompareValidator1" ValidationGroup="PublishPassValidation"
                      ControlToValidate="txtConfirmPassword"
                      ControlToCompare="txPassword" runat="server"
                      ErrorMessage="Passwords do not match">
</asp:CompareValidator>

Другие советы

Вы можете отключить проверку на стороне клиента для этого Валидатора.

EnableClientScript="false"

Однако это будет означать обращение к серверу туда и обратно, чтобы сообщить о недопустимом состоянии, и вам придется убедиться, что вы проверяете, что страница действительно действительна, прежде чем продолжить.

Page.Validate("PublishPassValidation");

if (Page.IsValid)
{
    // Do Stuff
}

У меня такое ощущение, что у вас на панели обновлений в качестве триггеров включены дети?

Нажимают ли пользователи «ВВОД» в поле пароля?Можете ли вы подтвердить, что панель обновления по какой-то причине выполняет частичное обновление после перемещения фокуса?

Если это так, это вызовет проверку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top