38 votes

Activez ou désactivez dynamiquement le RequiredFieldValidator en fonction des critères suivants

J'ai un formulaire ASP.NET avec trois entrées de texte, une pour "Téléphone au travail", une pour "Téléphone à la maison" et une pour "Téléphone portable". Chacune de ces entrées de texte est associée à un RequiredFieldValidator. J'ai également une liste déroulante dans laquelle l'utilisateur peut sélectionner le type de téléphone préféré.

Je veux exiger uniquement le champ qui est sélectionné dans la liste déroulante. Par exemple, si l'utilisateur sélectionne "Téléphone professionnel" dans la liste déroulante, je veux désactiver le RequiredFieldValidator pour les champs "Téléphone fixe" et "Téléphone portable", et ne rendre obligatoire que le champ "Téléphone professionnel".

J'ai une méthode qui active et désactive ces validateurs en fonction de la valeur de la liste déroulante, mais je n'arrive pas à savoir quand l'appeler. Je veux que cette méthode soit exécutée avant que la validation ait lieu sur la page. Comment dois-je m'y prendre ?

41voto

hunter Points 33850

Vous pouvez le faire avec JavaScript comme ceci:

 ValidatorEnable(RequiredFieldValidatorId, false);
 

Ensuite, demandez à votre liste déroulante d'utiliser l'événement onchange (je suggérerais d'utiliser 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);
    ....
});
 

11voto

Jason M Points 408

Pourquoi ne pas utiliser un CustomValidator dans ce cas ? Désactiver/activer un RequiredFieldValidator pourrait conduire à un problème de conception dans le futur - je m'en tiendrais à les utiliser sur les champs qui vont être obligatoires.

5voto

Gouse Points 31

Lorsque vous utilisez le téléphone fixe, dans l'événement dropdown selectedindexchange, rendez les validateurs des champs obligatoires invisibles.

comme

si le téléphone fixe est sélectionné,

homephonevalidator.visible=true
cellphonevalidator.visible=false
workphonevalidator.visible=false

si le téléphone portable est sélectionné,

homephonevalidator.visible=false
cellphonevalidator.visible=true 
workphonevalidator.visible=false

si le téléphone de travail est sélectionné,

homephonevalidator.visible=false
cellphonevalidator.visible=false
workphonevalidator.visible=true

2voto

Claudio Redi Points 34297

L'événement OnChange de la liste déroulante peut donner quelque chose comme ceci

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

Vérifiez sur cette url. Section "API côté client

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

2voto

Slauma Points 76561

Un moyen possible serait :

  • Définir dans votre liste déroulante AutoPostBack="true"
  • Dans le SelectedIndexChanged gestionnaire d'événement de la liste déroulante activer/désactiver vos validateurs
  • Définir dans votre liste déroulante CausesValidation="false" afin d'éviter que les validateurs ne bloquent un postback lorsque vous modifiez l'entrée de la DropDownList.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X