web-dev-qa-db-fra.com

Activer ou désactiver dynamiquement RequiredFieldValidator en fonction de la valeur de DropDownList

J'ai un formulaire ASP.NET avec trois entrées de texte, une pour "Téléphone professionnel", "Téléphone personnel" et "Téléphone portable". Chacune de ces entrées de texte est associée à un RequiredFieldValidator. J'ai également une DropDownList où l'utilisateur peut sélectionner le type de téléphone préféré.

Je souhaite uniquement exiger le champ sélectionné dans DropDownList. Par exemple, si l'utilisateur sélectionne "Téléphone professionnel" dans DropDownList, je souhaite désactiver le RequiredFieldValidator pour "Téléphone personnel" et "Téléphone portable", rendant ainsi uniquement obligatoire le champ "Téléphone professionnel".

J'ai une méthode qui active et désactive ces validateurs en fonction de la valeur de DropDownList, mais je ne sais pas quand l'appeler. Je veux que cette méthode s'exécute avant que la validation n'ait lieu sur la page. Comment ferais-je ça?

37
Jeremy

Pourquoi ne pas utiliser un CustomValidator dans ce cas? Désactiver/activer un RequiredFieldValidator pourrait conduire à un problème de conception à l'avenir - je m'en tiendrai à les utiliser sur les champs qui seront nécessaires.

11
Jason M

Vous pouvez le faire avec JavaScript comme ceci:

ValidatorEnable(RequiredFieldValidatorId, false);

Demandez ensuite à votre liste déroulante d'utiliser l'événement onchange (je suggère 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);
    ....
});
40
hunter

Lorsque vous utilisez un téléphone personnel, dans l'événement déroulant selectedindexchange, rendez invisibles les validateurs de champ requis.

comme..

si le homephone 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
5
Gouse

Événement OnChange de la liste déroulante, vous pouvez avoir quelque chose comme ça

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

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

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

2
Claudio Redi

La voie possible serait:

  • Définissez dans votre DropDownList AutoPostBack="true"
  • Dans le gestionnaire d'événements SelectedIndexChanged du DropDownList, activez/désactivez vos validateurs
  • Définissez dans votre DropDownList CausesValidation="false" pour éviter que les validateurs bloquent une publication lorsque vous modifiez l'entrée DropDownList.
2
Slauma

Lors du changement de DropDownlist, vous devrez enregistrer un gestionnaire d'événements côté serveur qui active/désactive le validateur ...

HTH

0
Sunny