begin process at 2008 09 06 22:21:44
1 237 973 membres
355 nouveaux aujourd'hui
14 314 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème de validation sur FormView [ WebForms / Autre ] (v.massip)

Problème de validation sur FormView le 07/11/2007 16:04:11

v.massip
Membre Club
Bonjour à tous,

Je viens vers vous avec le problème suivant : Je n'arrive pas à réaliser une validation de FormView (en modification) via des Validators.

Je précise.

Ma page concerne l'administration des utilisateurs d'un site. Sur celle-ci se trouvent un MultiView contenant 2 Views.

La première View, affichée par défaut au chargement de la page, contient :
- un SQLDataSource récupérant les données (simple Select sur la base SQL Server 2005)
- un GridView affichant les données et contenant la colonne 'Sélection'
- un Button permettant de basculer vers la View 2 en mode création
- un Button permettant de basculer vers la View 2 en mode modification

La seconde View contient :
- un SQLDataSource permettant d'insérer un nouvel enregistrement dans la base de données, ou de récupérer l'enregistrement sélectionné dans la GridView pour le mettre à jour
- un FormView avec les champs nécessaires et les 2 liens 'Mettre à jour' et 'Annuler', et configuré comme expliqué ci-dessous.

Configuration du FormView :
- Ouverture en mode insertion si clic sur bouton n°1
- Ouverture en mode modification si clic sur bouton n°2

Jusque là, j'ai correctement paramétré les différents éléments de ma page et les différents tests ont été concluants (en gros, ça fonctionne ! ) : l'enregistrement est modifié ou créé, et l'on retourne sur la View n°1 avec la GridView mise à jour et sans sélection.

Je m'attelle donc à la tâche de validation des éléments renseignés dans le formulaire.
J'ai donc rajouté différents contrôles de validation dans le EditItemTemplate du FormView (et je les transposerai après dans le InsertItemTemplate) : 3 RequiredFieldValidator, 2 RegularExpressionValidator, 2 CompareValidator, 1 CustomValidator et 2 ValidationSummary.

Voici ces éléments :

<

asp:RegularExpressionValidatorID="REV_MAIL1"runat="server"ControlToValidate="MAILTextBox" Display="None"ErrorMessage="L'adresse mail renseignée n'est pas valide"ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ValidationGroup="VS_EditTemplate_IP"Visible="False">* L'adresse mail renseignée n'est pas valide</asp:RegularExpressionValidator>
<
asp:RequiredFieldValidatorID="RFV_MAIL"runat="server"ControlToValidate="MAILTextBox" Display="None"ErrorMessage="Vous devez renseigner une adresse mail"ValidationGroup="VS_EditTemplate_IP" Visible="False">* Vous devez renseigner une adresse mail</asp:RequiredFieldValidator>
<
asp:RegularExpressionValidatorID="REV_MAIL2"runat="server"ControlToValidate="MAIL2TextBox" Display="None"ErrorMessage="L'adresse mail renseignée n'est pas valide"ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ValidationGroup="VS_EditTemplate_IP"Visible="False">* L'adresse mail renseignée n'est pas valide</asp:RegularExpressionValidator>
<
asp:CompareValidatorID="CVL_MAIL"runat="server"ControlToCompare="MAIL2TextBox" ControlToValidate="MAILTextBox"Display="None"ErrorMessage="Les adresses mail ne correspondent pas" ValidationGroup="VS_EditTemplate_IP"Visible="False">* Les adresses mail ne correspondent pas</asp:CompareValidator>
<
asp:ValidationSummaryID="VS_IP"runat="server"ValidationGroup="VS_EditTemplate_IP"/>

<
asp:RequiredFieldValidatorID="RFV_IDENTIFIANT"runat="server"ControlToValidate="IDENTIFIANTTextBox" Display="None"ErrorMessage="Vous devez renseigner un identifiant"ValidationGroup="VS_EditTemplate_IC" Visible="False">* Vous devez renseigner un identifiant</asp:RequiredFieldValidator>
<
asp:CustomValidatorID="CVL_IDENTIFIANT"runat="server"ControlToValidate="IDENTIFIANTTextBox" Display="None"ErrorMessage="Cet identifiant existe déjà"OnServerValidate="CVL_IDENTIFIANT_ServerValidate" ValidationGroup="VS_EditTemplate_IC"Visible="False">* Cet identifiant existe déjà</asp:CustomValidator>
<
asp:RequiredFieldValidatorID="RFV_MDP"runat="server"ControlToValidate="MOT_DE_PASSETextBox" Display="None"ErrorMessage="Vous devez renseigner un mot de passe"ValidationGroup="VS_EditTemplate_IC" Visible="False">* Vous devez renseigner un mot de passe</asp:RequiredFieldValidator>
<
asp:CompareValidatorID="CVL_MDP"runat="server"ControlToCompare="MOT_DE_PASSE2TextBox" ControlToValidate="MOT_DE_PASSETextBox"Display="None"ErrorMessage="Les mots de passes ne correspondents pas" ValidationGroup="VS_EditTemplate_IC"Visible="False">* Les mots de passes ne correspondents pas</asp:CompareValidator>
<
asp:ValidationSummaryID="VS_IC"runat="server"ValidationGroup="VS_EditTemplate_IC"/>

J'ai normalement correctement paramétré ces différents contrôles selon les règles (si j'utilise ces contrôles dans une form simple, cela fonctionne). Précision : le link 'Mettre à jour' à son 'CauseVaildation' à 'True' et son 'ValidationGroup' à 'VS_EditTemplate_IP' pour les premiers tests. Je compte ensuite faire la validation par le code pour valider les 2 groupes.

Cependant, je me retrouve avec le problème suivant : les validations des contrôles se font après l'update SQL, ce qui implique que je suis renvoyé directement sur ma View n°1 ==> Donc, si je mets un champ requis à Null, je me retrouve avec une jolie erreur, malgré la présence des validators.

Pour palier à cela, je me suis mis à modifier la procédure 'FormView_ItemUpdating' afin de forcer la validation par le code avant l'update et ainsi pourvoir stopper l'opération si celle-ci se révèle non valide. Voici mes différents essais :

- ESSAI 1 :
Dim REV As RegularExpressionValidator
REV = FormView.FindControl("REV_MAIL1")
REV.Validate()
If REV.IsValid = FalseThen
e.Cancel = True
MVW.ActiveViewIndex = 1
ExitSub
EndIf

- ESSAI 2 :
Me.Validate()
IfMe.IsValid = False Then
e.Cancel = True
MVW.ActiveViewIndex = 1
ExitSub
EndIf

Dans les 2 cas (et autres variantes : Me.Page.Validate(), ...), la validation forcée ne retournait pas de résultat (valeurs de 'IsValid' par défaut à 'True'), et donc, l'update s'exécutait avant la validation.
En posant un point d'arrêt en mode debug et en changeant manuellement la valeur de 'IsValid' à 'False', l'application n'exécute pas l'update, la view n°2 reste bien affichée et les messages d'alerte s'affichent.

Deuxième possibilité, je modifie la procédure du clic sur le lien 'Mettre à jour', 'UpdateButton_Click' selon les mêmes essais que ci-dessus. Je me retrouve avec le même problème.


Quelqu'un aurait-il une idée sur l'explication de ce problème, et sur la solution à y apporter ?

Merci d'avance pour votre aide !

Re : Problème de validation sur FormView le 07/11/2007 16:12:25

v.massip
Membre Club
Précisions sur ma configuration dev :
Windows XP Pro 2002 SP2
Visual Studio 2005 Pro (8.0.50727.42)
Framework .NET 2.0.50727
Langage VB

Précisions sur ma configuration serveur :
Windows Server 2003 Standard SP2
SQL Server 2005

Re : Problème de validation sur FormView le 12/11/2007 17:00:52

Classé sous : asp, server, runat, edittemplate, validationgroup

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS