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)

mercredi 7 novembre 2007 à 16:04:11 | Problème de validation sur FormView

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 !

mercredi 7 novembre 2007 à 16:12:25 | Re : Problème de validation sur FormView

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

lundi 12 novembre 2007 à 17:00:52 | Re : Problème de validation sur FormView

v.massip

Membre Club
Personne n'a d'idées ???



Cette discussion est classé dans : asp, server, runat, edittemplate, validationgroup


Répondre à ce message

Sujets en rapport avec ce message

Datagrid qui me rend fou [ par MOOKIES ] Salut,bon je vais essyer d'être clair. J'EN ES MARRE sa marche pas, là rien d'original. En fait je veut utiliser la commande Delete d'un Datagrid (bas Calcul de l'âge dans un datalist [ par Alain37Mtl ] Mon application web affiche la liste des membres et je voudrais afficher l'âge de chacun au lieu de leur date de naissance. Protected <FONT color=#000 Atlas, popup calendar [ par cnguyen ] Pour l'utilisation d'atlas, j'ai un petit souci, il me dit :Extender controls require a ScriptManager to be present on the page.Nom du paramètre : scr récupérer la sélection d'1 DDL pour faire une insertion dans 1 BDD [ par bootchoz ] salut et merci pour votre aide !!!j'ai créér un formview avec un isertItemTemplate qui contient :2 textbox rattachées à une meme table, 1 DDL rattaché CS0123: No overload for 'OK_Click' matches delegate 'System.EventHandler' [ par bootchoz ] salut,ce message d'erreur apparait : CS0123: No overload for 'OK_Click' matches delegate 'System.EventHandler' lorsque je compile.voila mon code de ma ModalPopupExtender commun à plusieurs contrôles [ par JulienV ] Bonjour Je voudrais associer un ModalPopupExtender à plusieurs LinkButton en utilisant le même Panel mais lorsque je fais cela, le script de la propri gridview et procedure stockee [ par rmelon ] Bonjour, J'ai une page compose d'une SqlDatasource dont la SelectCommand est une procédures stockees renvoyant plusieurs lignes en fonction de plusieu UpdatePanel Ajax [ par liliemumue ] BonjourAlors je vais expose rmon probleme.J'ai un formulaire dans lequel j'ai une DropDownList et troie panel à Visible =false.Lors de la selection d' ModalPopupExtender et AsyncPostBackTrigger [ par JulienV ] BonjourN'est il pas possible d'appeler de faire un appel asynchrone à du code be pb de recupération de paramétre [ par babylonne ] Bonjour tt le monde, j'ai un petit souci par rapport au fichier resultat.aspx c-à-d quand je transmets mes paramétres depuis le fichier info.aspx , il


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.