asp: CustomValidator не возвращает false

Не знаю, что здесь не так. Это страница, разработанная кем-то другим, и я пытаюсь исправить одну из проблем.

Сценарий:

Сайт ASP.NET.

Login.aspx имеет <asp:login> и три группы проверки. Login.aspx.cs - это частичный класс user_login.

Каждая группа проверки имеет текстовое поле и ассоциированный пользовательский валидатор. Все три настраиваемых валидатора срабатывают, когда что-то вводится в соответствующее текстовое поле, но проблема заключается в том, что только первое текстовое поле (привязанное к validationgroup = 1) возвращает false, когда проверка не выполняется.

Для 2-го и 3-го настраиваемый валидатор срабатывает, но при возникновении проблемы с проверкой и даже после установки «args.IsValid = false;» процесс продолжается с тем, что необходимо выполнить дальше.

Не знаю, что здесь происходит. Я хочу, чтобы пользовательский валидатор возвращал false. В худшем случае, есть ли способы вернуть элемент управления обратно в «текстовое поле» в случае сбоя проверки?

Ниже используется пользовательский валидатор.

<asp:CustomValidator ID="ExistingIdValidator" runat="server" ControlToValidate="NewUserName" 
    ValidateEmptyText="true" ValidationGroup="NewUserForm" 
    OnServerValidate="NewUserNameCheck_ServerValidate">
</asp:CustomValidator> 


protected void NewUserNameCheck_ServerValidate(object source, ServerValidateEventArgs args)
{
    CustomValidator validator = source as CustomValidator;
    if (validator != null)
    {
        string NewuserNameValue = this.NewUserName.Text;
        Guid registeredUserId = (Guid)Membership.GetUser(NewuserNameValue).ProviderUserKey;
        if (registeredUserId != null)
        {
            validator.IsValid = false;
            this.FailureText_New.Text = "This UserID already exists. Please login as existing user";
            args.IsValid = false;
        }
    }
}

person Anirudh    schedule 27.01.2012    source источник
comment
код здесь не отображается .. все еще пытаюсь   -  person Anirudh    schedule 28.01.2012
comment
@ jadarnel27: Я не вижу, изменили ли вы мой код. Если это код настраиваемого валидатора в моем исходном сообщении, у меня он все еще не работает.   -  person Anirudh    schedule 28.01.2012
comment
Не могли бы вы показать функцию JavaScript NewUserNameCheck_ServerValidate?   -  person John Pick    schedule 28.01.2012
comment
Неважно. Я путал OnServerValidate с OnClientValidate.   -  person John Pick    schedule 28.01.2012
comment
Не могли бы вы показать определение NewUserNameCheck_ServerValidate?   -  person John Pick    schedule 28.01.2012
comment
@JohnPick: я только что вставил приведенный выше код. Для меня это не форматирование. Просмотрите и обновите. Элемент управления входит внутрь, поскольку this.FailureText_New.Text заполняется и отображается.   -  person Anirudh    schedule 30.01.2012
comment
Если у кого-то есть предложения / комментарии, пожалуйста, дайте мне знать.   -  person Anirudh    schedule 30.01.2012
comment
Что будет, если закомментировать строку validator.IsValid = false;? Мне это кажется немного ... странным.   -  person Josh Darnell    schedule 30.01.2012
comment
@ jadarnel27: Я пробовал комментировать, но без разницы.   -  person Anirudh    schedule 31.01.2012
comment
Проверяет ли событие кнопки отправки Page.IsValid?   -  person John Pick    schedule 06.02.2012
comment
@JohnPick: Мой код вставлен выше, и я думаю, что я этого не делаю. Где мне это делать?   -  person Anirudh    schedule 08.02.2012
comment
Самое забавное в проверке на стороне сервера ASP.NET то, что она не предотвращает автоматически выполнение ваших событий щелчка. Это как если бы процедура проверки выполнялась, а затем результаты игнорировались. Итак, первое, что нужно поместить в событие вашей кнопки, - это if (!Page.IsValid) return;. Таким образом вы предотвращаете выполнение остальной части события и заставляете пользователя исправлять любые ошибки в форме.   -  person John Pick    schedule 08.02.2012
comment
@JohnPick: Я бы отметил этот вопрос как ответ. Можете ли вы опубликовать приведенные выше комментарии в качестве предлагаемого ответа, и я отмечу его как закрытый.   -  person Anirudh    schedule 21.02.2013


Ответы (1)


Самое забавное в проверке на стороне сервера ASP.NET то, что она не предотвращает автоматически выполнение ваших событий щелчка. Это как если бы процедура проверки выполнялась, а затем результаты игнорировались. Итак, первое, что нужно поместить в событие вашей кнопки, - это if (!Page.IsValid) return;. Таким образом вы предотвращаете выполнение остальной части события и заставляете пользователя исправлять любые ошибки в форме.

person John Pick    schedule 21.02.2013
comment
Спасибо, Джон. Это сэкономило мне много времени. Предположительно, другие (не настраиваемые) валидаторы на странице также имеют динамическую проверку в JavaScript, которая вообще предотвращает отправку кнопки обратно на сервер и, таким образом, скрывает такое поведение. - person phn; 11.12.2019