2010-02-24 13 views
3

Salut les gars j'utilise 2 requiredfiledvalidator pour 2 sélectionne, on travaille, mais le second (celui que je dois) isntRequiredFieldValidator ne fonctionne pas sous Firefox

<asp:dropdownlist id="ddlMod" runat="server" Width="235px" AutoPostBack="True" Font-Names="Arial" Font-Size="XX-Small"> 
</asp:dropdownlist> 
<asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" Font-Names="Arial" Font-Size="XX-Small" 
ErrorMessage="Select Mod" InitialValue="00" Display="Dynamic" ControlToValidate="ddlMod"> 
</asp:requiredfieldvalidator> 

<asp:dropdownlist id="ddlInd" runat="server" Width="235px" AutoPostBack="True" Font-Size="XX-Small"> 
</asp:dropdownlist> 
<asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" Font-Names="Arial" Font-Size="XX-Small" 
ErrorMessage="Select Ind" InitialValue="0" Display="Dynamic" ControlToValidate="ddlInd"> 
</asp:requiredfieldvalidator> 

Si je sélectionne le 2ème que je peux voir l'erreur message pour le 1er, mais je ne peux pas voir un message si je ne sélectionne pas ou si je choisis le 1er. Merci!

Répondre

0

Je crois qu'il s'agit d'une limitation connue d'asp.net concernant l'utilisation de la propriété AutoPostBack="true" dans les listes déroulantes. La propriété AutoPostBack annule le processus de validation et publie.

En tant que solution de contournement simple, vous pouvez faire la validation de se produire au cours de la postback en modifiant l'événement de chargement de page:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(Page.IsPostBack) 
     Page.Validate(); 
} 

Cela entraînera la validation de se produire encore après une situation AutoPostBack. Si les valeurs de la liste déroulante sont incorrectes, la page sera actualisée avec les messages d'erreur affichés comme prévu. L'inconvénient est que l'écran va scintiller, etc., mais la seule autre option est d'ajouter un script de validation côté client personnalisé à chaque contrôle DropDownList qui, personnellement, je ne pense pas qu'il en vaut la peine. Avec le code ci-dessus, n'oubliez pas que lorsque la page publie automatiquement, elle peut effectivement être invalide - mais d'autres méthodes que vous avez appelées peuvent s'attendre à une page valide. Utilisez la propriété Page.IsValid pour vous protéger contre cela. (L'utilisation de Page.IsValid est en fait la meilleure pratique de toute façon pour les formulaires validés.)

Exemple:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(Page.IsPostBack) 
     Page.Validate(); 

    ddlMod.SelectedIndexChanged += new EventHandler(ddlMod_SelectedIndexChanged); 

    if(Page.IsValid) 
    { 
     //load some data; do some things... 
    } 
} 

protected void ddlMod_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if(Page.IsValid) 
    { 
     //do some stuff if the page validated 
    } 
} 

Une note finale - Vous voulez vous assurer Page.Validate() est appelé au début du cycle de vie de la page (Page_Load est un bon point) comme si vous faites référence à Page.IsValid et Validate() n'a pas encore été appelé, Page.IsValid à lancer une grande exception méchante ...

Si vous voulez vous débarrasser du scintillement de la publication automatique, vous pouvez également utiliser un ajax UpdatePanel pour rendre les choses plus faciles pour l'utilisateur.

Espérons que cela aide!

+1

Merci pour la réponse rapide, mais ne fonctionne toujours pas. Je dois d'abord sélectionner ddlMod pour pouvoir travailler. Je ne sais pas pourquoi cela se passe parce que sous IE cela fonctionne très bien. Que puis-je essayer d'autre? Merci dans le conseil – Giskard