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 : savoir, dans la fonction de validation, quel contrôle a déclenché cette fonction


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut CustomValidator : savoir, dans la fonction de validation, quel contrôle a déclenché cette fonction
    Bonjour,


    J'ai un formulaire où j'utilise un contrôle de validation pour une textbox.
    J'utilise plus précisément un CustomValidator.
    Ce CustomValidator appartient à un groupe de validation (Appelons le GroupeValidationA).
    La textbox appartient également à GroupeValidationA.
    Enfin, 2 boutons (bouton d'ajout et bouton de modification) appartiennent également à GroupeValidationA.

    La particularité de cette textbox est que la donnée affichée dans celle ci sert dans 2 cas :
    - 1er cas : Ajout d'une nouvelle donnée
    - 2ème cas : Modification de la donnée

    De plus, il faut savoir que la textbox est reliée à des données d'une listbox : quand je clique sur une ligne de la listbox, cette donnée s'affiche dans la textbox. Cela sert pour la fonctionnalité d'édition de donnée => on peut savoir à tout moment quelle est la donnée que l'on est en train d'éditer (en récupérant l'id de la donnée séléctionnée dans la listbox)

    Pour le 1er cas, Ajout de nouvelle donnée, le contrôle à effectuer est :
    - textbox non vide
    - la donnée n'existe pas déjà dans la base de donnée

    Pour le 2ème cas, Edition de la donnée, le contrôle à effectuer est :
    -textbox non vide
    - la donnée n'existe pas déjà dans la base de donnée (SAUF si la donnée que l'on tente de valider est la même que celle séléctionnée dans la listbox)

    Donc pour la même textbox, selon le cas (ajout OU édition), la fonction de validation change légèrement en fonction de si on a appuyé sur le bouton d'ajout ou sur le bouton d'édition.


    Est ce possible de savoir quel contrôle a déclenché la fonction de validation du CustomValidator, à l'intérieur de cette fonction de validation ?
    Ou c'est impossible et il faut obligatoirement que j'utilise 2 textboxs avec pour chacune un contrôle de validation ?


    Merci de votre aide.

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Salut,

    Je te rassure tu peux le faire assez facilement en utilisant le sender

    voici un petit exemple assez générique qui devrais te convenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected void MA_FONCTION(object sender, EventArgs e)
            {
                WebControl _wc = (WebControl)sender;
     
                switch (_wc.ID)
                {
                     case "BT_ajout" : //TODO ; 
                                             break;
                     case "BT_edit" :  //TODO ; 
                                             break;
                     Default :            //TODO ; 
                                             break;
                }
            }

    Dans ton cas tu peu directement caster en Imagebutton ou button car tu sais déjà quel type de contrôle tu va recevoir

    Voila en espérant t'avoir aidé

  3. #3
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Et non justement.

    Voici à quoi ressemble la signature de la fonction de validation d'un CustomValidator :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    protected void customValidatorMyTxtBox_ServerValidate(object source, ServerValidateEventArgs args)
    {}

    où l'object source est en fait l'objet CustomValidator,
    et où le ServerValidateEventArgs args contient 2 champs :
    - Value de type string qui prend comme valeur le contenu de la zone d'édition à valider,
    - IsValid qui doit prendre la valeur true si la validation est acceptée.

    J'ai toujours pas trouvé sinon

  4. #4
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Ah oui c'est vrai, donc dans ce cas personnellement je ferais une fonction qui appel le validator a dé-quoi. Et dans ton cas j'utiliserais deux customvalidator

    exemple :

    ASPX
    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
     
    <asp:TextBox ID="MA_TB" runat="server" ></asp:TextBox>
    <asp:CustomValidator runat="server" ID="CVal_Edit"  
                                               ControlToValidate="MA_TB"
                                               Display="None"
                                               OnServerValidate="ServerValidationEdit"
     <asp:CustomValidator runat="server" ID="CVal_Add"  
                                               ControlToValidate="MA_TB"
                                               Display="None"
                                               OnServerValidate="ServerValidationAdd"
     
    <asp:ImageButton ID="BT_ajout" runat="server" [...] OnClick="CLICK" /> 
    <asp:ImageButton ID="BT_edit" runat="server" [...] OnClick="CLICK" /> 
     
    />
    CS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    protected void CLICK(object sender, EventArgs e)
    {
          WebControl _wc = (WebControl)sender;
     
                switch (_wc.ID)
                {
                     case "BT_ajout" : CVal_Add.Validate() ; 
                                             break;
                     case "BT_edit" :   CVal_Edit.Validate(); 
                                             break;
                     Default :             break;
                }
    }
    Voilà après tu implémentes tes "ServerValidationAdd" et "ServerValidationEdit"

  5. #5
    Membre éclairé Avatar de Johann7751
    Profil pro
    Analyste Programmeur Junior
    Inscrit en
    Février 2009
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur Junior

    Informations forums :
    Inscription : Février 2009
    Messages : 234
    Par défaut
    Ta façon de faire cette fois ci n'est pas correcte mais elle a eu le mérite de me mettre sur la voie.
    En fait, ça ne fonctionne pas car la fonction de validation est exécutée AVANT l'évènement Click du bouton.
    A part ça l'idée est pas mal j'ai d'ailleurs repris pas mal de choses dans la solution que j'ai trouvé.




    Pour résumer ce que j'ai fais :

    - 1 seule textbox (pas de groupe de validation défini)
    - 2 boutons : "Edit" et "Add" (pas de groupe de validation défini)
    - 2 CustomValidators : l'un pour valider la textbox en mode addition de données et l'autre pour valider la textbox en mode édition de données. Les 2 CustomValidator ont pour ControlToValidate la même textBox.

    A noter, et c'est important, c'est qu'il faut définir un groupe de validation pour chacun des CustomValidator. (ValidationGroup)
    Grâce à cela, cela évitera que les fonctions de validations associées à ces CustomValidator ne soient appelées à chaque PostBack de la page
    .


    Ensuite, j'ai 2 évènements OnClick, l'un associé à mon bouton "Add" et l'autre associé à mon bouton "Edit".
    Et, c'est dans cette évènement OnClick que j'appelle la fonction de validation du CustomValidator approprié.

    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
    protected void ButtonAdd_Click(object sender, EventArgs e)
        {
            CustomValidatorAddMode.Validate();
            if (Page.IsValid)
            {
                // Traitement => Ajout d'une nouvelle donnée
            }
        }
     
        protected void ButtonEdit_Click(object sender, EventArgs e)
        {
            CustomValidatorEditMode.Validate();
            if (Page.IsValid)
            {
                // Traitement => Modification de la donnée
            }
        }

    Merci pour ton aide.

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

Discussions similaires

  1. Quel code VBA pour cette fonction.
    Par AlexisSz dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/05/2011, 11h03
  2. Réponses: 28
    Dernier message: 29/07/2006, 16h04
  3. (newbie)savoir quel bouton a appelé une fonction
    Par tibtibby dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/06/2006, 16h50
  4. Réponses: 1
    Dernier message: 20/03/2006, 13h30
  5. Dans quel package se trouve les fonctions C ??
    Par red210 dans le forum Linux
    Réponses: 9
    Dernier message: 18/12/2005, 20h16

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