asp.net webforms - ajax в проверке клиента CustomValidator
У меня есть страница WebForms, которая используется для сбора личных данных, и среди прочего мне нужно проверить, существует ли уже введенное пользователем электронное письмо в базе данных, и мне нужно проверить это со стороны клиента (это первый шаг многоэтапная форма и обратная передача запускается только после завершения всех шагов).
Я решил вызвать метод WCF из функции проверки клиента, например:
Контроль:
<asp:TextBox ID="EmailAddressTextBox" runat="server"/>
<asp:CustomValidator ValidationGroup="Personal" ID="EmailExistsVal" runat="server"
ControlToValidate="EmailAddressTextBox" ErrorMessage="Email already exists"
ClientValidationFunction="EmailExistsVal_Validate"/>
Кнопка "Отправить":
<input type="button" value="Go" onclick="Page_ClientValidate('Personal'); return false;" />
Функция проверки:
function EmailExistsVal_Validate(sender, args) {
$.get('Service.svc/CheckEmail?email=' + $('#<%=EmailAddressTextBox.ClientID%>').val(), null, null, 'json')
.success(function (data, textStatus, xhr) {
args.IsValid = data.AlreadyExists === false;
})
.error();
}
Проблема в том, что он выполняется в неправильном порядке. Когда нажатие кнопки запускает проверку, запрос ajax в пользовательской проверке выполняется, когда вызывается Page_ClientValidate (что ожидается), метод службы работает как charm, но ответ от возвращается после ПОСЛЕ Page_ClientValidate (то есть об этом, также ожидается - это асинхронный вызов).
Одним из возможных решений является синхронный вызов $.get, например, здесь: /questions/17980987/kak-ya-mogu-zastavit-jquery-vyipolnyat-sinhronnyij-a-ne-asinhronnyij-ajax-zapros/17980989#17980989, но мне интересно, есть ли более элегантное решение. Или все в порядке, и я не буду так делать?