Ответ 1
Почему бы не использовать CustomValidator в этом случае? Отключение/включение RequiredFieldValidator может привести к проблеме дизайна в будущем - я буду придерживаться их использования в полях, которые понадобятся.
У меня есть форма ASP.NET с тремя текстовыми вводами, по одному для "Рабочий телефон" , "Домашний телефон" и "Сотовый телефон". Каждый из этих текстовых входов имеет связанный с ним связанный с ним RequiredFieldValidator. У меня также есть DropDownList, где пользователь может выбрать предпочтительный тип телефона.
Мне нужно только поле, выбранное в DropDownList. Например, если пользователь выбирает "Рабочий телефон" из DropDownList, я хочу отключить RequiredFieldValidator для "Домашний телефон" и "Сотовый телефон", поэтому требуется только поле "Рабочий телефон" .
У меня есть метод, который включает и отключает эти валидаторы на основе значения DropDownList, но я не могу понять, когда его вызвать. Я хочу, чтобы этот метод выполнялся до проверки на странице. Как мне это сделать?
Почему бы не использовать 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
Событие OnChange в раскрывающемся списке может иметь что-то вроде этого
function EnableValidator(){
ValidatorEnable(requiredFieldValidator, validatorMustBeEnabled);
}
Проверьте этот URL. Раздел "Клиентские интерфейсы API"
http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside
Возможный способ:
AutoPostBack="true"
SelectedIndexChanged
DropDownList включить/отключить ваши валидаторыCausesValidation="false"
, чтобы избежать блокировки обратной связи при изменении записи DropDownList.OnChange из списка 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);
}
}