CompareValidator внутри UpdatePanel - VS2008 - PullRequest
0 голосов
/ 14 ноября 2008

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

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

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

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

EDIT:

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

    <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>

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

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

Ответы [ 3 ]

1 голос
/ 15 ноября 2008

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

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

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

1 голос
/ 15 ноября 2008

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

<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>
1 голос
/ 15 ноября 2008

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

EnableClientScript="false"

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

Page.Validate("PublishPassValidation");

if (Page.IsValid)
{
    // Do Stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...