IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Plusieurs Validator pour un même Textbox


Sujet :

ASP.NET

  1. #1
    Membre éprouvé
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Par défaut Plusieurs Validator pour un même Textbox
    Bonjour,

    J'ai besoin de valider la saisie d'une date, elle est obligatoire et doit respecter un certain intervalle. j'ai donc utiliser un requiredfiedvalidator pour l'obligation, un rangevalidator pour l'intrevalle et un comparevalidator pour que le format soit valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <asp:TextBox ID="txtDateNaissance" runat="server" Width="80" Text='<%#Eval("pDateNaissance", "{0:d}")%>' ValidationGroup="dltLegitime"></asp:TextBox>
     
    <asp:RequiredFieldValidator
    ID="RequiredFieldValidator5" runat="server" ErrorMessage="Date de naissance manquante" Text="*"
    Display="Dynamic" ControlToValidate="txtPrenom" SetFocusOnError="true" ValidationGroup="dltLegitime"></asp:RequiredFieldValidator>
     
    <asp:CompareValidator ID="CompareValidator21" runat="server" 
    ErrorMessage="Date Invalide, le format de la date doit être jj/mm/aaaa ou jj/mm/aa" Display="dynamic" Text="*"
    ControlToValidate="txtDateNaissance" Operator="DataTypeCheck" 
    Type="Date" setFocusOnError="True" ValidationGroup="dltLegitime"></asp:CompareValidator>
     
    <asp:RangeValidator ID="RVDateNaissance" runat="server"  Text="*"
    ErrorMessage="L'enfant doit avoir entre 2 et 25 ans au 31 Décembre de l'année en cours"
    type="Date" Display="dynamic" ControlToValidate="txtDateNaissance" ValidationGroup="dltLegitime"></asp:RangeValidator>
    seulement, si le format de la date n'est pas valide, le comparevalidator ET le rangevalidator se mettent en erreur. je comprend pourquoi mais j'aimerais trouvé une parade, mes utilisateurs s'embrouillent vite s'ils voient plusieurs messages.

    est ce que c'est possible de rendre un validator conditionnel ?
    par exemple: si le compare validator est en erreur, ne pas tester le rangevalidator ?

    ou est ce que je suis obligé de tout tester dans un customvalidator?

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Pourquoi n'utilises tu pas directement un custom validator dans lequel tu testes directement tes trois conditions avant de valider la page ?

    Ca me parait etre plus simple.

    Ca doit aussi pouvoir se faire dans un regularExpressionValidator mais je serais bien incapable d'écrire la regExp .

  3. #3
    Membre éprouvé
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Par défaut
    j'ai pensé au customvalidator, mais avant je voulais être sûr que ce fonctionnement ne vient pas d'une erreur de ma part.

    sinon pour le regularexpressionvalidator, il me validerait bien le format de la date mais pas l'intervalle de date, donc ca reviendrait au même je pense.

    bah je m'atèle au customvalidator.

    je mets en résolu un peu plus tard au cas où quelqu'un d'autre aurait une idée ...

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tu as complétement raison pour le regualrexpressionValidator
    Désolé de t'avoir induis en erreur.

    Bon courage pour le customValidator, ce n'est pas le plus fun à manipuler

  5. #5
    Membre éprouvé
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 77
    Par défaut
    J'ai fait mon customvalidator.
    Le plus dur a été de trouver comment modifier le ErrorMessage du validator depuis le script JS.

    si ça intéresse quelqu'un voici le script de validation en JS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    function TestDate(source, args){
        //on supprimer les espaces de la saisie
        var lValue  = args.Value.replace(/ /g,"")
     
        // si le champ n'est pas vide
        if (lValue != ""){
            //format dd/mm/yy, dd.mm.yy, dd-mm-yy
            var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/ 
            //format dd/mm/yyyy, dd/mm/yyyy, dd.mm.yyyy, dd-mm-yyyy
            var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
     
            //si la date n'est pas conforme à un des deux formats
            if ( (reg1.test(lValue) == false) && (reg2.test(lValue) == false) ) {
                //on modifie le errormessage du validator
                source.attributes("errormessage").nodeValue = "La date est invalide, le format doit être jj/mm/aaaa ou jj/mm/aa";
                args.IsValid = false;
            }else{
                //test de l'intervalle
     
                //on éclate la date
                var date = lValue.split("/");
                if ( date.length == 1 ) { 
                    date = lValue.split("-"); 
                    if ( date.length == 1 ) { date = lValue.split("."); } 
                }
     
                //on construit les dates
                var Now = new Date();
                var MaxDate = new Date(Now.getFullYear()-2,11, 31); // 31/12/anne en cours - 2
                var MinDate = new Date(Now.getFullYear()-25,00, 01);// 01/01/annee en cours - 25
                var DateSaisie = new Date(date[2], date[1]-1, date[0]);
     
                // MinDate <= DateSaisie <= MaxDate ?
                if ( (MinDate <= DateSaisie) && (DateSaisie <= MaxDate) ) {
                    args.IsValid = true;
                }else{
                    source.attributes("errormessage").nodeValue = "L'enfant doit avoir entre 2 et 25 ans au 31 Décembre de l'année en cours";
                    args.IsValid = false;
                }
            }
        }else{
            source.attributes("errormessage").nodeValue = "La date de naissance est obligatoire.";
            args.IsValid = false;
        }
    }
    avec le validator:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <asp:TextBox ID="txtDateNaissance" runat="server" Width="80" Text='<%#Eval("pDateNaissance", "{0:d}")%>' ValidationGroup="dltLegitime"></asp:TextBox>
    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="" Text="*" 
    ControlToValidate="txtDateNaissance" ClientValidationFunction="TestDate" Display="dynamic" 
    ValidationGroup="dltLegitime" ValidateEmptyText="true"></asp:CustomValidator>
    Ne pas oublier ValidateEmptyText="true" pour que le validator valide même si le champ de saisie est vide.

  6. #6
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Joli morceau de JS et belle persévérance
    et merci de donner des nouvelles et une solutiion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/04/2008, 11h03
  2. Plusieurs destinations pour un même formulaire
    Par dessinateurttuyen dans le forum Langage
    Réponses: 14
    Dernier message: 01/08/2006, 14h13
  3. Plusieurs valeurs pour un même champ
    Par will89 dans le forum Requêtes
    Réponses: 32
    Dernier message: 14/06/2006, 10h06
  4. Réponses: 8
    Dernier message: 05/12/2005, 14h43
  5. Plusieurs vues pour le même objet
    Par nicolas66 dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/10/2004, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo