「職場の電話番号」、「自宅の電話番号」、「携帯電話番号」のそれぞれに対応する3つのテキスト入力がある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
イベントハンドラーでバリデーターを有効/無効にしますCausesValidation="false"
は、DropDownListエントリを変更したときに、バリデーターがポストバックをブロックしないようにします。DropDownlistのOnChangeでは、バリデーターを有効/無効にするサーバー側イベントハンドラーを登録する必要があります...
HTH