asp: CustomValidator не возвращает false - PullRequest
1 голос
/ 28 января 2012

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

Сценарий:

Сайт ASP.NET.

Login.aspx имеет <asp:login> и есть три группы проверки. Login.aspx.cs является частичным классом «user_login».

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

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

Не знаю, что здесь происходит не так. Я хотел бы, чтобы customvalidator возвращал 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;
        }
    }
}

1 Ответ

1 голос
/ 21 февраля 2013

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

...