Включить / отключить RequiredValidator на стороне клиента / CustomValidator не запускается

У меня есть раскрывающийся список, где пользователь выбирает страну. Это обязательное поле.

Рядом с ним есть текстовое поле с именем State. Если пользователь выбирает US, то поле State обязательно. Если пользователь выбирает, например, Швецию, штат не требуется, поскольку в Швеции нет штатов.

Пример кода:

<asp:DropDownList runat="server" ID="Country"></asp:DropDownList>
<asp:RequiredFieldValidator ControlToValidate="Country"
                runat="server" Display="Static" ErrorMessage="Required field" />

<asp:TextBox runat="server" ID="State"></asp:TextBox>
<asp:CustomValidator ClientValidationFunction="DoesntGetFiredIfStateIsEmpty"
                runat="server" Display="Static" ErrorMessage="Required field" />

<!-- SO, RATHER THIS TOGETHER WITH CONDITIONAL FIRING -->
<asp:RequiredFieldValidator ControlToValidate="State"
                runat="server" Display="Static" ErrorMessage="Required field" />

Мой вопрос к вам: Как я могу сделать эту проверку огня CustomValidator, когда она пуста?

Или проще: как я могу сделать условный запуск RequiredValidator условно?

Или проще: как я могу включить / отключить RequiredValidator на стороне клиента?

2 ответа

Решение

Попробуйте сделать это с помощью JavaScript, чтобы включить и отключить валидаторы

ValidatorEnable(RequiredFieldValidatorId, false);

Проверьте этот вопрос, на который я ответил.

Asp.net имеет клиентскую функцию javascript для управления валидаторами, функцию "ValidatorEnable",

ValidatorEnable(RequiredFieldValidatorId, false);

Вы можете вызвать его просто используя javascript, вы должны отправить объект валидатора в функцию (а не только его идентификатор).

if (x==y) {
        ValidatorEnable($('#<%=rfvFamily.ClientID %>'), false);    
    } else {
        ValidatorEnable($('#<%=rfvFamily.ClientID %>'), true);
    }

или же

if (x==y) {
        ValidatorEnable(document.getElementById("<%=rfvFamily.ClientID %>", false);    
    } else {
        ValidatorEnable(document.getElementById("<%=rfvFamily.ClientID %>", true);
    }

полная документация на: http://msdn.microsoft.com/en-us/library/Aa479045

Другой способ - установить в свой DropDownList CausesValidation="false", чтобы валидаторы не блокировали обратную передачу при изменении записи DropDownList.

(*) Помните, что эта функция предназначена для клиентской части, для отключения валидатора на стороне сервера вы также должны отключить валидатор при обратной передаче страницы.

if (IsPostBack){
    if (x==y) {
        rfvFamily.Enabled = false;
    }
}
Другие вопросы по тегам