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, но мне интересно, есть ли более элегантное решение. Или все в порядке, и я не буду так делать?

0 ответов

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