Лучшим способом было бы использовать CustomValidator
с кодом на стороне клиента, поскольку при этом будут отображаться все сообщения об ошибках, отправка блочной формы, а также гарантируется, что проверка повторяется на стороне сервера - помните, только то, что у вас есть доступная проверка на стороне клиента, не означает, что пользователь видел ее: Всегда проверяйте также и ваш ввод на сервере .
Ваш CustomValidator
будет затем закодирован для вызова методов Ajax и будет правильно показывать сообщения об ошибках клиенту:
<asp:Label ID="UserNameLabel" AssociatedControlID="UserName" runat="server">
UserName *:</asp:Label>
<asp:TextBox ID="UserName" runat="server" />
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server"
ControlToValidate="UserName" EnableClientScript="true"
ErrorMessage="You must supply a username!" />
<asp:CustomValidator ID="UserNameCustom" runat="server"
ControlToValidate="UserName"
ClientValidationFunction="CheckExisting"
OnServerValidate="UserNameCustomValidate"
ErrorMessage="Username already taken" />
А ваша функция ClientValidation должна выглядеть примерно так:
<script type="text/javascript">
function CheckExisting(source, arguments) {
// Pass the arguments.Value to your AJAX call:
if (ajaxCallUserNameTaken(arguments.Value)) {
arguments.IsValid = false;
}
}
</script>
(Очевидно, вам нужно написать метод ajaxCallUserNameTaken для вызова метода вашей страницы / веб-службы / и т. Д.)
Делая это таким образом, вы гарантируете, что методы валидации будут соответствовать ожидаемым; он будет вызываться всякий раз, когда пользователь выходит из текстового поля , оставляя значение (он не будет вызываться, если текстовое поле пусто), и будет гарантировать, что пользователь не сможет отправить страницу, пока он не предоставит уникальная ценность. Вы также захотите создать метод, на который ссылается OnServerValidate
, чтобы гарантировать, что значение хорошо, когда оно попадает и на сервер - это должно вызывать тот же код, который используется конечной точкой AJAX для уменьшения дублирования кода и т. Д.
Первоначально я собирался предложить, чтобы вы могли использовать объект Page_Validators
на стороне клиента для некоторой проверки в событии onBlur
, но я не думаю, что это подходит здесь, так как это приводит к большему боль:
- Предполагается, что хотя на странице может быть несколько валидаторов, в проверяемом нами элементе управления есть только RequiredFieldValidator
- RequiredFieldValidator не срабатывает в течение
OnBlur
, если пользователь выходит из элемента управления без установки значения - только если он установил и сбросил значение, поэтому даже если isvalid
равно true
, вам необходимо проверить для пустой строки!