Включить / отключить 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;
}
}