web-dev-qa-db-ja.com

DropDownListの値に基づいてRequiredFieldValidatorを動的に有効または無効にします

「職場の電話番号」、「自宅の電話番号」、「携帯電話番号」のそれぞれに対応する3つのテキスト入力があるASP.NETフォームがあります。これらの各テキスト入力には、RequiredFieldValidatorが関連付けられています。ユーザーが好みの電話の種類を選択できるDropDownListもあります。

DropDownListで選択されているフィールドのみが必要です。たとえば、ユーザーがDropDownListから「勤務先電話番号」を選択した場合、「自宅電話番号」と「携帯電話番号」のRequiredFieldValidatorを無効にして、「勤務先電話番号」フィールドのみを必須にします。

DropDownListの値に基づいてこれらのバリデーターを有効または無効にするメソッドがありますが、いつ呼び出すかはわかりません。ページで検証が行われる前にこのメソッドを実行したい。どうすればいいですか?

37
Jeremy

この場合、CustomValidatorを使用しないのはなぜですか? RequiredFieldValidatorをオフ/オンにすると、将来的に設計上の問題が発生する可能性があります-必要になるフィールドでそれらを使用することに固執します。

11
Jason M

次のような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);
    ....
});
40
hunter

自宅の電話を使用している場合、ドロップダウンの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
5
Gouse

ドロップダウンのOnChangeイベントには、次のようなものがあります。

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

このURLを確認してください。セクション「クライアント側API」

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

2
Claudio Redi

可能な方法は次のとおりです。

  • DropDownListに設定AutoPostBack="true"
  • DropDownListのSelectedIndexChangedイベントハンドラーでバリデーターを有効/無効にします
  • DropDownListに設定CausesValidation="false"は、DropDownListエントリを変更したときに、バリデーターがポストバックをブロックしないようにします。
2
Slauma

DropDownlistのOnChangeでは、バリデーターを有効/無効にするサーバー側イベントハンドラーを登録する必要があります...

HTH

0
Sunny