Включить / отключить RequiredValidator на стороне клиента / CustomValidator не запускается - PullRequest
6 голосов
/ 23 апреля 2010

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

Рядом с ним есть текстовое поле с именем 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 ]

9 голосов
/ 23 апреля 2010

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

ValidatorEnable(RequiredFieldValidatorId, false);

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

0 голосов
/ 10 декабря 2018

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#aspplusvalid_clientside

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

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

if (IsPostBack){
    if (x==y) {
        rfvFamily.Enabled = false;
    }
}
...