CompareValidator внутри UpdatePanel - VS2008

Я использую 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-классы и стили удалены для краткости)

Разместите разметку тега для валидатора

FlySwat 14.11.2008 22:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
1 753
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

EnableClientScript = "false"

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

Page.Validate("PublishPassValidation");

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

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

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

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

Ответ принят как подходящий

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

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

RFV добавлены в обе коробки, и я прислушался к вашему совету. Честно говоря, это неоптимально (поскольку поведение все еще присутствует, просто гораздо менее вероятно, что его можно будет увидеть), но это очень незначительная вещь и должна удовлетворить тестеров QA.

Jeff 17.11.2008 16:50

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