Динамически включать или отключать RequiredFieldValidator на основе значения DropDownList - PullRequest
37 голосов
/ 31 марта 2010

У меня есть форма ASP.NET с тремя текстовыми вводами, по одному для «Рабочий телефон», «Домашний телефон» и «Мобильный телефон». Каждый из этих текстовых входов имеет связанный с ним RequiredFieldValidator. У меня также есть DropDownList, где пользователь может выбрать предпочтительный тип телефона.

Я хочу требовать только поле, выбранное в DropDownList. Например, если пользователь выбирает «Рабочий телефон» из списка DropDownList, я хочу отключить RequiredFieldValidator для «Домашний телефон» и «Мобильный телефон», тем самым делая обязательным только поле «Рабочий телефон».

У меня есть метод, который включает и отключает эти валидаторы на основе значения DropDownList, но я не могу понять, когда его вызывать. Я хочу, чтобы этот метод был запущен до того, как проверка прошла на странице. Как бы я это сделал?

Ответы [ 7 ]

40 голосов
/ 31 марта 2010

Вы можете сделать это с помощью 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);
    ....
});
11 голосов
/ 07 апреля 2010

Почему бы не использовать CustomValidator в этом случае? Отключение / включение RequiredFieldValidator может привести к проблеме проектирования в будущем - я бы придерживался их использования в полях, которые будут обязательными.

5 голосов
/ 17 августа 2011

Когда вы используете домашний телефон, в выпадающем списке 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
2 голосов
/ 31 марта 2010

Возможный способ:

  • Установить в вашем DropDownList AutoPostBack="true"
  • В обработчике событий SelectedIndexChanged DropDownList включить / отключить ваши валидаторы
  • Установите в свой DropDownList CausesValidation="false", чтобы валидаторы не блокировали обратную передачу при изменении записи DropDownList.
2 голосов
/ 31 марта 2010

Событие OnChange выпадающего у вас может быть что-то вроде этого

function EnableValidator(){
    ValidatorEnable(requiredFieldValidator, validatorMustBeEnabled);
} 

Проверьте этот URL. Раздел "Клиентские API"

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

0 голосов
/ 21 июля 2015

Это хороший способ включить и отключить проверку серверного элемента управления из события 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);
    }
}
0 голосов
/ 31 марта 2010

OnChange DropDownlist, вам нужно зарегистрировать обработчик событий на стороне сервера, который включает / отключает валидатор ...

НТН

...