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





Вы можете отключить проверку на стороне клиента для этого Валидатора.
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.
Разместите разметку тега для валидатора