Недействительная страница через JavaScript - PullRequest
1 голос
/ 14 февраля 2011

У меня есть регистрационная форма с несколькими элементами управления валидатора. Я проверяю доступность имени пользователя через AJAX (используя jQuery, а не UpdatePanel). Если имя пользователя занято, я хотел бы сделать страницу недействительной, как другие валидаторы ASP.NET из моей функции JavaScript. Это возможно? Примеры?

Вот мой текущий функционал:

// In head...
<script type="text/javascript">
$(document).ready(function () {
    $('#<%= username.ClientID %>').blur(function () {

        $.ajax({
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            url: 'MyService.asmx/CheckAvailability',
            dataType: 'json',
            data: '{ "username": "' + username + '" }',
            success: function (response) {

                // stuff

                // If username is taken, invalidate

            }, error: function () { /* stuff */ }
        });
    });
});
</script>

// The markup...
<dl><dt>Username</dt>
<dd>
    <asp:textbox id="username" runat="server" />
    <asp:requiredfieldvalidator id="usernameRequiredValidator" runat="server"
        controltovalidate="username"
        errormessage="Required"
        display="Dynamic" />
    <span id="avail_response"></span>

<!-- More stuff... -->

1 Ответ

2 голосов
/ 14 февраля 2011

Эта ссылка содержит подробное объяснение проверки ASP.Net. Прокрутите вниз до абзаца «Клиентский API», где объясняется, что вы можете установить переменную Page_IsValid. Однако следует помнить, что нет гарантии, что этот API останется прежним в будущих версиях .NET, поэтому проверьте наличие Page_IsValid.

РЕДАКТИРОВАТЬ:

Извините, в своем предыдущем комментарии я немного спешил и просто ответил на ваш вопрос, не глядя на картину в целом. Я просто перечитал ваш вопрос, и на самом деле он ничего не сделает, потому что когда вы нажимаете кнопку «Отправить», пользователь запускает повторную проверку всех валидаторов. Поскольку у имени пользователя текстового поля есть значение, ваш обязательный валидатор действителен, и форма отправляется.

Я думаю, что лучшее решение в долгосрочной перспективе (и такое, которое напрямую не вызывает функции javascript в .NET) - это следующее:

  1. Добавить скрытое поле
  2. Создать необходимый полевой валидатор для этого скрытого поле
  3. Поместите необходимый полевой валидатор позади первого требуемого валидатора и выдайте ему то же сообщение об ошибке, что и требуемый валидатор
  4. Поместите некоторое значение в скрытое поле в Ваша функция успеха, если имя пользователя доступно, во всех остальных делайте скрытое поле пустым.

Это немного обходной путь, но это будущее и проще, чем выяснить, как это сделать с помощью функций javascript платформы валидатора .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...