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 :

CustomValidator : bouton de validation et formulaire


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut CustomValidator : bouton de validation et formulaire
    Bonjour,

    J'avais posé un problème sur les customvalidator et finalement, il a été décidé de changer la manière de procédé.

    Voila donc le problème. J'ai 3 champs :
    Nom
    Prenom
    Login
    que l'utilisateur peut remplir. Et un bouton envoyer

    Ce que j'aimerais c'est "l'algo" suivant :
    - Si le login n'est pas rempli et si le nombre de caractères du nom est inférieur à 20 alors login = nom et rempli base de données
    - Si le login non rempli et nombre de caractère nom > 20 alors erreur
    - Si le login est rempli et nombre de caractère login < 20 alors ok (et rempli bdd)
    - Si le login est rempli et nb caractère login > 20 alors erreur

    Tout se fait après avoir appuyé sur le bouton envoyé

    Le problème est le suivant :

    J'appelle donc une fonction 'btn_send_click' qui me fait ses tests.
    Le prob c'est que le validator en asp.net ne s'active pas au bon moment. Je m'explique :
    La 1e fois que je clique sur le bouton envoyé, même si le login n'est pas rempli et que le nombre de caractère du nom > 20, pas d'erreur d'afficher. C'est seulement si je reclique sur le bouton envoyé que l'erreur s'affiche. Quelqu'un a une idée? :s

    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    Personne pour aider?

  3. #3
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    regarde si tu peux pas mettre ton code ailleurs pour qu'il s'executye seulement lorsque tes objets seront bien rempli...

  4. #4
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    bonjour,
    si tu veux que la methode du custom validator se déclenche au moment où tu rempli ton login il faut que tu initialises la propriété AutoPostBack de ton TextBox à True, ainsi dès que ton textbox perdra le focus il y aura un postback qui sera déclenché et ta methode sera executée ensuite s'il n'y a pas d'erreur tu pourras cliquer sur le bouton Envoyer.

  5. #5
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    C'est bon en fait... ca fonctionne la pour le moment avec les expressions régulières ^^

  6. #6
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    Ahh merci du conseil ccambier je vais voir ca.

  7. #7
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    Rebonjour



    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
     
    protected void bnSave_Click(object sender, EventArgs e)
        {
     
           if (RequiredFieldValidator2.IsValid)
            {
     
                       String[] adname_split;
                String text_adname = null;
                adname_split = AdName.Text.Split(' ');
                foreach (String adname in adname_split)
                {
                    if (adname.Trim().Length != 0)
                    {
                        text_adname += adname.Trim() + ' ';
     
                    }
                }
                text_adname = text_adname.Substring(0, text_adname.Length - 1);
     
              if (text_adname.Length > 5) CustomValidator1.IsValid = false;
              else AdName.Text = text_adname;
     
     
            }
    Le required fonctionne bien.
    Pour l'autre champs voila ce que je voudrais :
    supprimer les espaces du login et les recoller avec un espace s'il y en avait.

    Le problème est que, avec le customvalidator, je n'ai pas mon résultats après mon 1e click mais au 2e. L'algo n'est pas encore au point je précise mais j'aimerai deja affiché l'erreur au bon moment et pas après avoir cliqué 10 fois

  8. #8
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    1) d'où vient adname_split ? ce ne serait pas split_tmp?
    2) si tu cliques sur le bouton bnSave avant d'avoir fait la validation il est clair qu'il va la faire au 2ème click
    3) si tu mets les propriétés AutoPostBack et CausesValidation de ton TextBox à True c'est au moment de quitter le textbox qu'il y aura une validation.

    exemple code ASP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <asp:TextBox runat="server" ID="txtTest" AutoPostBack="True" CausesValidation="true"></asp:TextBox>
            <asp:CustomValidator runat="server" ID="custTest" ControlToValidate="txtTest" ErrorMessage="erreur" OnServerValidate="custTest_ServerValidate"></asp:CustomValidator>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    Code Behind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected void custTest_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (txtTest.Text == "Bonjour")
                args.IsValid = true;
            else
                args.IsValid = false;
        }
     
     
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(txtTest.Text);
        }
    Voilà avec ça normalement du devrais t'en sortir ;-)

  9. #9
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    merci ! en fait j'ai juste eu a déplacer mon code sur la validation sur la méthode en cliquant le bouton vers la méthode appelée par le validator lol

    mm j'avais édité mon code

    Par contre, je suis pas sur que ce soit la meilleure manière de coder, j'ai pas regardé toutes les méthodes associées au string

    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
    if (RequiredFieldValidator2.IsValid)
            {
     
                String[] adname_split;
                String text_adname = null;
                adname_split = AdName.Text.Split(' ');
                foreach (String adname in adname_split)
                {
                    if (adname.Trim().Length != 0)
                    {
                        text_adname += adname.Trim() + ' ';
     
                    }
                }
                text_adname = text_adname.Substring(0, text_adname.Length - 1);
                if (text_adname.Length > 5)
                {
     
                    args.IsValid = false;
                }
                else
                {
                    args.IsValid = true;
                    AdName.Text = text_adname;
                }
            }

  10. #10
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    normalement la méthode Split sépare les éléments d'une chaine de caractère sur base d'un séparateur passé en paramètre et renvoie les différentes parties dans un tableau de string mais le séparateurs est tout simplement éliminé.

    mais après avoir bien regardé je ne vois pas très bien où tu veux en venir, pcq pour moi ton code ne sert à rien? ou alors faut m'expliquer !!!

    ce n'est que pour elever les espaces superflux?

  11. #11
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    enlevé les espaces superflus et mettre un espace malgré tout.

    Je m'explique( le _ symbole l'espace).

    si j'ai nom____prenom_ : je veux obtenir nom_prenom

    dc je fais un split pour récupérer les 2 parties puis je rajoute un espace entre les 2 et je supprime le dernier espace à la fin

  12. #12
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    oki je vois mtnt
    voilà ce que j'aurais fait, mais y a certainement moyen d'encore améliorer.
    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
     
    if (RequiredFieldValidator2.IsValid)  
    {   
        String text_adname = null; 
        foreach (String adname in AdName.Text.Split(' '))  
        { 
          if (adname.Trim().Length != 0)  
          {  
             text_adname += adname.Trim() + ' ';   
          }  
        }  
        text_adname = text_adname.Trim(); 
        if (text_adname.Length > 5)  
        {   
             args.IsValid = false; 
        }  
         else  
        {  
          args.IsValid = true; 
          AdName.Text = text_adname; 
        }  
    }

  13. #13
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    heu sauf si je ne m'abuse, si tu fais ca tu supprimes les espaces que t'as rajouté à la main et du coup autant fait un trim directement?

  14. #14
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    La méthode Trim supprime les espaces en fin de chaine et non ceux qu'il y a à l'intérieur.

    voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string test = "bonjour tout le monde    ";
    Response.Write("length: "+test.Length +", trim: " + test.Trim() + ", trim().length:" + test.Trim().Length.ToString());
    si tu veux eliminer juste en début de chaine tu la méthode TrimStart() et en fin de chaine TrimEnd().

  15. #15
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Par défaut
    ah bah autant pour moi mon substr ne servait a rien en effet
    merci pour tout je continue de voir ce que je peux faire :p

  16. #16
    Membre expérimenté Avatar de ccambier
    Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2006
    Messages : 256
    Par défaut
    n'oublie pas le tag resolu si ça l'est

    et bonne continuation

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 25/11/2014, 21h00
  2. Je dois cliquer 2 fois sur le bouton pour valider mon formulaire !
    Par intik dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/10/2011, 11h34
  3. Bouton pour valider un formulaire
    Par Socki dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2009, 17h04
  4. [Formulaire]Un bouton pour valider deux fomulaires
    Par Le_tzao dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/12/2005, 11h08
  5. [FLASH MX2004] Formulaire et le bouton de validation
    Par liam81150 dans le forum Flash
    Réponses: 2
    Dernier message: 22/07/2005, 10h38

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