Динамически включать или отключать RequiredFieldValidator на основе значения DropDownList
У меня есть форма ASP.NET с тремя текстовыми вводами, по одному для "Рабочий телефон", "Домашний телефон" и "Мобильный телефон". Каждый из этих текстовых входов имеет связанный с ним RequiredFieldValidator. У меня также есть DropDownList, где пользователь может выбрать предпочтительный тип телефона.
Я хочу только требовать поле, которое выбрано в DropDownList. Например, если пользователь выбирает "Рабочий телефон" из списка DropDownList, я хочу отключить RequiredFieldValidator для "Домашний телефон" и "Мобильный телефон", тем самым делая обязательным только поле "Рабочий телефон".
У меня есть метод, который включает и отключает эти валидаторы на основе значения DropDownList, но я не могу понять, когда его вызывать. Я хочу, чтобы этот метод был запущен до того, как проверка прошла на странице. Как бы я это сделал?
7 ответов
Почему бы не использовать CustomValidator в этом случае? Отключение / включение RequiredFieldValidator может привести к проблеме проектирования в будущем - я бы придерживался их использования в полях, которые будут обязательными.
Вы можете сделать это с помощью JavaScript следующим образом:
ValidatorEnable(RequiredFieldValidatorId, false);
Затем пусть ваш выпадающий список использует событие onchange (я бы предложил использовать jQuery)
$("#<%=dropDownList.ClientID %>").change(function(){
var val = $(this).val();
var skip = null;
if (val == 1)
skip = "workPhoneValidator";
else if (val == 2)
skip = "cellPhoneValidator";
....
// by popular demand...
var $skip = $("#" + skip)[0];
if (skip != "workPhoneValidator") ValidatorEnable($skip, false);
if (skip != "cellPhoneValidator") ValidatorEnable($skip, false);
....
});
Когда вы используете домашний телефон, в выпадающем списке selectedindexchange сделайте обязательные поля валидаторов невидимыми.
лайк..
если выбран домашний телефон,
homephonevalidator.visible=true
cellphonevalidator.visible=false
workphonevalidator.visible=false
если выбран мобильный телефон,
homephonevalidator.visible=false
cellphonevalidator.visible=true
workphonevalidator.visible=false
если выбран рабочий телефон,
homephonevalidator.visible=false
cellphonevalidator.visible=false
workphonevalidator.visible=true
Возможный способ будет:
- Установить в своем DropDownList
AutoPostBack="true"
- в
SelectedIndexChanged
Обработчик события DropDownList включает / отключает ваши валидаторы - Установить в своем DropDownList
CausesValidation="false"
чтобы валидаторы не блокировали обратную передачу при изменении записи DropDownList.
OnChange событие выпадающего у вас может быть что-то вроде этого
function EnableValidator(){
ValidatorEnable(requiredFieldValidator, validatorMustBeEnabled);
}
Проверьте этот URL. Раздел "Клиентские API"
При изменении DropDownlist вам необходимо зарегистрировать обработчик событий на стороне сервера, который включает / отключает валидатор...
НТН
Это хороший способ включить и отключить проверку серверного элемента управления из события jquery:
<label class="label_radio" for="Oversize" onclick="EnableDisbledValidator('show')">show textbox</label>
<asp:TextBox ID="txtNote" runat="server" class="checkvalidation"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvNote" runat="server" ControlToValidate="txtNote" SetFocusOnError="true" ErrorMessage="Please enter the note" Display="Dynamic" CssClass="error-tooltip"></asp:RequiredFieldValidator>
function EnableDisbledValidator(lblShow) {
if (lblShow == "hide") {;
ValidatorEnable($('#<%=rfvNote.ClientID %>')[0], false);
} else {
ValidatorEnable($('#<%=rfvNote.ClientID %>')[0], true);
}
}