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?
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.
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);
....
});
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
É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
La voie possible serait:
AutoPostBack="true"
SelectedIndexChanged
du DropDownList, activez/désactivez vos validateursCausesValidation="false"
pour éviter que les validateurs bloquent une publication lorsque vous modifiez l'entrée DropDownList.Lors du changement de DropDownlist, vous devrez enregistrer un gestionnaire d'événements côté serveur qui active/désactive le validateur ...
HTH