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

Développement Web avec .NET Discussion :

Validator sur CheckBoxList


Sujet :

Développement Web avec .NET

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Validator sur CheckBoxList
    Bonjour tout le monde

    J'ai un bug de développement qui me laisse perplexe : le contrôle CustomValidator ne marche pas sur un CheckBoxList.

    Alors voilà, je voudrais faire un contrôle sur le nombre de case cochées dans un CheckBoxList. Pour cela je me suis dit qu'un CustomValidator serait la bonne solution. Je compte le nombre de case et je test pour savoir si j'en ai le bon nombre. Facile, à priori.

    Donc j'ai mis ça côté HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <asp:CheckBoxList ID="cblCentreInteret" runat="server" RepeatDirection="Horizontal" RepeatLayout="Table" RepeatColumns="3" Width="100%"></asp:CheckBoxList>
     
    <asp:CustomValidator ID="cvCentreInteret" runat="server" ControlToValidate="cblCentreInteret"></asp:CustomValidator>
    Et là, sans aller dans le CodeBehind (enfin, si, j'ai juste défini le ErrorMessage) il me dit :
    Le contrôle 'cblCentreInteret' référencé par la propriété ControlToValidate de 'cvCentreInteret' ne peut pas être validé.
    Sans plus d'explication.

    J'ai repris la MSDN et j'ai rien de trouvé de particulier dedans.
    Vous y comprennez quelque chose ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour,

    Soit c'est un oubli, soit tu ne l'as pas copié lors de la rédaction de ton post, mais en tout cas je ne vois pas la property OnServerValidate="ServerValidation" de ton CustomValidator.

    Du coup il faudrait aussi poster le code de ta méthode du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     void ServerValidation(object source, ServerValidateEventArgs args)
    En espérant t'avoir aidé.

    [EDIT] Sinon pour faire plus simple, tu peux regarder le billet de Cyril Durand intitulé CheckBoxList et Validation : imposer qu'au moins une checkbox soit coché qui te donne un exemple[/EDIT]

  3. #3
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci Nicolas pour ton aide.

    Non, ce n'est pas un oubli, c'est automatique. C'est un évènement du CustomValidator.

    J'ai un autre CustomValidator dans ma page, sur un autre contrôle et j'ai pas eu besoins de lui spécifier le truc. Dans le CodeBehind, j'ai pris l'évènement ServerValidate du CustomValidator et j'ai programmé mon contrôle, tout simplement et ça marche bien.

    Par acquis de conscience j'ai spécifié comme tu me l'indique, mais cela ne change rien.
    Voici mon code actuel :
    côté HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:CheckBoxList ID="cblCentreInteret" runat="server" RepeatDirection="Horizontal" RepeatLayout="Table" RepeatColumns="3" Width="100%"></asp:CheckBoxList>
    <asp:CustomValidator ID="cvCentreInteret" runat="server" ControlToValidate="cblCentreInteret" OnServerValidate="cvCentreInteret_ServerValidate"></asp:CustomValidator>
    et mon CodeBehind
    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 Sub cvCentreInteret_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cvCentreInteret.ServerValidate
            Dim i As Int16 = 0
            For Each ci As ListItem In cblCentreInteret.Items
                If ci.Selected Then
                    i += 1
                End If
            Next
            If i > 4 Then
                args.IsValid = True
            Else
                args.IsValid = False
            End If
        End Sub
    Rien de bien transcendantal en somme.

    Pour l'exemple voici le code de mon autre CustomValidator
    Côté HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:TextBox ID="txtDateNaissance" runat="server"></asp:TextBox>
    <asp:CustomValidator ID="cvDateNaissance" runat="server"></asp:CustomValidator>
    et CodeBehind
    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
     Protected Sub cvDateNaissance_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cvDateNaissance.ServerValidate
            Dim frFR As New CultureInfo("fr-FR")
            Dim testdate As DateTime
     
            If DateTime.TryParseExact(args.Value, "dd/mm/yyyy", frFR, DateTimeStyles.None, testdate) Then
     
                If GetAge(args.Value) < 18 Or GetAge(args.Value) > 99 Then
                    args.IsValid = False
                Else
                    args.IsValid = True
                End If
            Else
                args.IsValid = False
            End If
     
        End Sub
    Et celui là marche trés bien (encore merci à Tomlev pour son aide sur la fonction GetAge)

    Vois tu ce que je veux dire ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  4. #4
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Ok, je vois mieux le truc.

    A tout hasard, peux-tu tester en enlevant de ton CustomValidator la property ControlToValidate ?

    Tu aurais ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:CheckBoxList ID="cblCentreInteret" runat="server" RepeatDirection="Horizontal" RepeatLayout="Table" RepeatColumns="3" Width="100%"></asp:CheckBoxList>
    <asp:CustomValidator ID="cvCentreInteret" runat="server" OnServerValidate="cvCentreInteret_ServerValidate"></asp:CustomValidator>

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    A mon avis tu ne peux pas utiliser un validator sur un CheckBoxList, parce qu'il n'a pas l'attribut ValidationProperty...

    Citation Envoyé par MSDN
    For an input control to be validated, the System.Web.UI.ValidationPropertyAttribute attribute must be applied to the control

  6. #6
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Oui j'ai vu ça aussi. Le fait de ne pas avoir de ValidationPropertyAttribute, fait qu'on ne peut utiliser ControlToValidate. D'où mon post précédent.

    Sinon on peut peut-être contourner cela comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ValidationProperty("SelectedIndex")]
    public class CheckBoxList : System.Web.UI.WebControls.CheckBoxList
    {
    }
    et dans le Web.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <tagMapping>
      <add tagType="System.Web.UI.WebControls.CheckBoxList, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mappedTagType="Namespace.CheckBoxList, Assembly"/>
    </tagMapping>
    A défaut, il y a la solution de Scott Mitchell qui fonctionnera très bien. Cf cet article.

    En espérant t'avoir aidé.

  7. #7
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    @Nicolas : je n'ai plus d'erreur mais je n'ai pas de contrôle. Lorsque je clique sur le formulaire à vide, il me mets tous mes messages d'erreur attendus sauf celui qui devrait me dire de choisir des centres d'interêt.


    @Tomlev : outre le billet dont Nicolas nous parle sur le Blog de Cyril Durand j'ai aussi trouvé ça http://forums.asp.net/t/1363788.aspx qui fait un contrôle sur un CheckBoxList.
    Alors moi je veux bien le truc de la MSDN, mais doit y avoir un souci quelque part.

    Une autre idée ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  8. #8
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    @Nicolas : j'ai posté en même temps que toi, du coup, je reprends ton message avec le lien de Scott Mitchell.

    D'abords je trouve ça, vachement compliqué, mais bon, s'il faut en passer par là. J'ai commencé par traduire le C# en VB avec mon traducteur en ligne.

    J'ai deux soucis (vu que je suis pas trés doué).
    Le premier se passe dans le code de la Sub : il y a une ligne qui fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return (_listctrl <> Nothing)
    Et là il me dit :
    L'opérateur '<>' n'est pas défini pour les types 'System.Web.UI.WebControls.ListControl' et 'System.Web.UI.WebControls.ListControl'
    J'ai essayé un "Is Not Nothing", mais ça marche pas mieux.

    Deuxième souci : là on touche à un truc que je ne maitrise pas. Dans mon composant j'ai mis le tag qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Register TagPrefix="CustomValidators" Namespace="CustomValidators" Assembly="filename_of_DLL_file" %>
    Je ne sais pas ce qu'il faut que je mette dans l'attribut Assembly sacant que la Class et le Namespace sont placé dans le fichier de CodeBehind de mon composant.

    A part ça, je pense que ça doit aller sauf que j'ai aps bien compris ce que fais la nouvelle Class comme contrôle. Si je décrypte bien elle vérifie qu'on a cohé une case, moi j'en voudrais 5, mais surtout, si je dois passer par ce genre de chose, je voudrais pouvoir spécifier, sous forme de propriété ou d'attribut le nombre de case mini à cocher.

    Au surplus, je voudrais que se soit accessible sur l'ensemble de mon site, donc je pense qu'il faudrait que je mette le Tag Prefix dans mon web.config, mais je ne sais pas trop faire ça.

    Merci les gars.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  9. #9
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Hello

    La transcription en VB.NET devrait donner quelque chose comme ceci (attention, je ne code jamais en VB... ) :

    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
    Imports System.Web.UI
    Imports System
    Imports System.Web.UI.WebControls
    Imports System.ComponentModel
     
    Namespace CustomValidators
        Public Class RequiredFieldValidatorForCheckBoxLists
            Inherits System.Web.UI.WebControls.BaseValidator
            Private _listctrl As ListControl
     
            Public Sub New()
                MyBase.EnableClientScript = False
            End Sub
     
            Protected Overrides Function ControlPropertiesValid() As Boolean
                Dim ctrl As Control = FindControl(ControlToValidate)
     
                If ctrl IsNot Nothing Then
                    _listctrl = DirectCast(ctrl, ListControl)
                    Return (_listctrl IsNot Nothing)
                Else
                    Return False
                End If
                ' raise exception
            End Function
     
            Protected Overrides Function EvaluateIsValid() As Boolean
                Return _listctrl.SelectedIndex <> -1
            End Function
        End Class
    End Namespace
    Ensuite pour le référencement de ton contrôle c'est tout simple en fait. L'assembly à indiquer est celui où est stocké ton namespace et ta classe. Si tu as codé ton composant dans le projet MonSiteWeb, alors l'assembly (si le nom de l'assembly est le même que celui de projet) sera : MonSiteWeb

    Concernant le fait d'avoir une ou 5 cases à cocher pour que le validator valide la saisie, c'est à toi de le paramétrer. L'idéal étant de rajouter une simple property int à ton composant (de façon à pouvoir spécifier dans le markup de ta page le nombre d'items mini à checké pour que la validation soit ok).

    Enfin, concernant la disponibilité du contrôle sur tout ton site, effectivement il faut mieux mettre en place le référencement sur le fichier web.config plutôt que sur toutes les pages (bonjour la duplication du code si tu as beaucoup de pages..). Voici un exemple, admettons que tu souhaites référencer ce contrôle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <%@ Register TagPrefix="TonPrefix" Namespace="TonNameSpace" 
      Assembly="TonAssembly" %>
    Alors tu mettras dans le Web.config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <system.web>
        <pages>
          <controls>
            <add assembly="TonAssembly"
                    namespace="TonNameSpace"
                    tagPrefix="TonPrefix" />
          </controls>
        </pages>
    </system.web>
    En espérant t'avoir aidé.

  10. #10
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Bon, décidément, je suis vraiment pas doué.
    Tes explications sont pourtant limpides, mais je capte pas un truc : l'Assembly.

    Alors mon projet je l'ai fait comme un site web, sans préciser d'Assembly.
    J'ai fais un NameSpace que j'ai collé dans mes classes externes sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Imports Microsoft.VisualBasic
    Imports System.Xml
     
    Namespace ProjetY
        Public Class Outils
     
    #Region "Outils"
        plein de function et de Sub
    #End Region
        End Class
    End Namespace
    Ceci est dans un fichier outil.vb qui se trouve dans le répertoire App_Code.

    Du coup, là j'ai fais une nouvelle classe que j'ai appellé CtrlPerso.vb et que j'ai mis dans le répertoire App_Code. ça donne ça :
    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
    Imports Microsoft.VisualBasic
    Imports System.Web.UI
    Imports System
    Imports System.Web.UI.WebControls
    Imports System.ComponentModel
    
    Namespace ProjetY
        Public Class CtrlPerso
    'ici j'ai rien mis
        End Class
    
        Public Class RequiredFieldValidatorForCheckBoxLists
            Inherits System.Web.UI.WebControls.BaseValidator
            Private _listctrl As ListControl
    
            Public Sub New()
                MyBase.EnableClientScript = False
            End Sub
    'j'ai enlever les Function pour faire moins lourd sur le message Mais c'est un copier coller de la traduction que tu m'as faite.    End Class
    
    End Namespace
    Ensuite je suis allé dans mon web.config et j'ai mis ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <add assembly="ProjetY" namespace="ProjetY" tagPrefix="CtrlPerso" />
    Mais je pense que l'Assembly, c'est pas bon.
    Dans le composant où je veux le customValidator j'ai mis ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <CtrlPerso:RequiredFieldValidatorForCheckBoxLists id="reqCBList" runat="server" ControlToValidate="cblCentreInteret" ErrorMessage="Please select at least one checkbox..." />
    Et là il me dit sur le RequiredFieldValidatorForCheckBoxLists qui est souligné en vert :
    L'élément 'RequiredFieldValidatorForCheckBoxLists' n'est pas un élément connu. Ceci peut se produire s'il existe une erreur de compilation dans le site Web ou si le fichier Web.config est manquant.
    ET là ça confirme que l'Assembly, c'est pas bon. Et je sais pas ce qu'il faut que je marque. J'ai aps d'Assembly, en fait, je crois.

    Désolé de pas capter plus vite.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  11. #11
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Hum, tu utilises un WebSite et non une WebApplication ? (cf ce billet pour connaître les différences).

    Essaye de mettre : assembly="App_Code". Normalement, tu ne devrais même pas avoir à indiquer l'assembly (cf la section Using the App_Code Folder for Testing Controls sur cet article MSDN)

  12. #12
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Ben heu, ouaips, j'utilise un Website, vu que je fais du Web site !!! hi hi hi

    Bon, j'irai voir en détail les différences entre les deux, peut-être que je me goure depuis deux ans, en fait. Mais la vie m'a appris qu'il n'est jamais trop tard pour progresser et apprendre.

    Du coup, avec ma curiosité naturelle, j'ai essayé sans indiqué d'assembly et j'ai plus d'erreur, la apge s'affiche bien.

    Mais j'ai toujours pas de messages d'erreur si je ne coche pas de case dans la CheckBoxList.
    Là je crois que ça dois venir sur code dans la nouvelle classe.
    Sauf que, vu les explication en anglais de notre ami Scott Mitchell, j'ai pas tout capté.

    C'est bien la Function EvaluateIsValid() qui renvoi si c'est coché ou pas ?
    Mais que fais la Function ControlPropertiesValid(), ça je comprends pas, ça fait appel à des notions de VB qui m'échappe.

    Merci pour ton aide.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  13. #13
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bon tu n'as plus d'erreur on progresse.

    Concernant les méthodes :

    • ControlPropertiesValid vérifie si les paramètres du Validator son correct. Dans notre cas, le code va checker que le contrôle indiqué via ControlToValidate existe bien, et aussi qu'il est bien du type ListControl.
    • EvaluateIsValid : là il s'agit de la fonction booléenne chargée de dire si la saisie est valide ou non. Actullement, un seul check est réalisé sur le SelectedIndex (si différent de -1 alors il y a forcément une case de cochée). C'est ici que tu devras apporter les modifications, si par exemple tu souhaites dire que la saisie est valide pour minimum 5 cases cochées.

    En espérant t'avoir aidé.

  14. #14
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Ok, maintenant, j'ai tout compris. C'est déjà ça.

    Donc j'ai apporté un petite pate perso sur la Class que je poste là :
    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
     
    Public Class RequiredFieldValidatorForCheckBoxLists
            Inherits System.Web.UI.WebControls.BaseValidator
            Private _listctrl As ListControl
     
            Public Sub New()
                MyBase.EnableClientScript = False
                Logage("je fais new")
            End Sub
     
            Protected Overrides Function ControlPropertiesValid() As Boolean
                Dim ctrl As Control = FindControl(ControlToValidate)
                Logage("je vérifie")
                If ctrl IsNot Nothing Then
                    _listctrl = DirectCast(ctrl, ListControl)
                    Logage(_listctrl.Items.Count)
                    Return (_listctrl IsNot Nothing)
                Else
                    Logage("pas de controle")
                    Return False
                End If
                ' raise exception
            End Function
     
            Protected Overrides Function EvaluateIsValid() As Boolean
                Logage("j'évalue")
                Return _listctrl.SelectedIndex <> -1
            End Function
        End Class
    Tu noteras l'ajout de Logage. C'est une fonction de mon cru qui prend l'argument dans les paranthèse et le met dans un fichier texte. Ensuite je regarde dans le fichier texte pour voir ce que ce la donne. Au début j'ai programmer ce truc pour capter les Requêtes SQL avant qu'elles ne plantent.

    Dans notre cas présent on devrait voir au moins un "je fais new" et bien non, il n'y a rien, mais rien de rien. Donc je me demande si le CustomValidator est bien mis en place mais je ne sais pas trop comment contrôler ça.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  15. #15
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Je viens de réaliser un truc tout couillon : les Validator sont dans le code HTML généré.
    Donc j'ai ouvert la source de ma page et j'ai vu tous mes Validator, sauf celui qu'on ajoute en ce moment.

    Donc là, je suis vraiment paumé, j'ai le Tag devant les yeux côté HTML et rien dans la source générée.

    Manquerais pas un truc dans le New de la nouvelle Class ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  16. #16
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bon, il doit y avoir un problème dans la façon dont tu implémentes le contrôle.

    N'étant pas dispo cette aprem, je te joins un web site qui te montre comment faire fonctionner le contrôle. J'ai fait au plus simple, il n'y a qu'une page qui contient une CheckBoxList, un Button et le CustomValidator.

    Cela fonctionne bien.

    J'espère que tu pourras en déduire d'où provient ton erreur.

    Bon week-end.
    Fichiers attachés Fichiers attachés

  17. #17
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour tout ce que tu as fait, c'est vrament génial.

    Quand tu reviendras lire ce message j'espère que cela va te faire rire autant que moi.

    Mais avant tout, je voudrais souligner un point trés positif : grâce à tes explications, j'ai beaucoup mieux compris comment créer un contrôle personnalisé en en overidant certaine de ces Function ou Property.

    Donc ça c'est génial, vraiment un grand merci (trés sincère). Dommage que le Luwembourg soit si loin de la Bretagne, ça vaudrait bien une petite bière.

    Bon, maintenant passons au truc qui fait rire (peut-être un peu jaune).
    En fait, ça marche trés bien depuis le départ, même avec un CustomValidator normal.



    Heu, comment dire, j'ai fini par comprendre un truc en remontant mon formulaire contrôle par contrôle dans une page toute vierge : en fait, les Validator sur les zones de saisie du nom ou du prénom (par exemple) ils testent de suite, côté Client.
    Mais le CustomValidator il teste côté serveur, donc il fait un PostBack, mais tant que les autres contrôles ne sont pas passés il n'y a pas de PostBack et donc notre CustomValidator n'apparait pas.

    Hum, hum, enfin voilà, tout marche bien maintenant et j'ai appris un truc.

    Je suis vraient désolé de ne pas l'avoir vu plus tôt, je ne sais plus quoi dire pour détendre l'atmosphère, désolé, vraiment.

    Un trés bon week-end à toi et plein de bonnes choses.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  18. #18
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Ahem... effectivement...


    L'erreur est humaine, j'ai déjà fait pire .

    Le principal est que tu progresses (si en plus c'est grâce à mes modestes explications tant mieux lol )

  19. #19
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci pour ton indulgence

    Un trés bon week-end à toi.

    Le mien commence maintenant.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

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

Discussions similaires

  1. [VB NET2002] Créer un setup valide sur tout type de machine ?
    Par magic8392 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 02/05/2006, 16h41
  2. [VB NET2002] Créer un setup valide sur tout type de machine ?
    Par magic8392 dans le forum Installation, Déploiement et Sécurité
    Réponses: 5
    Dernier message: 29/04/2006, 09h44
  3. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  4. [JDBC] Opération non valide sur un ensemble
    Par marti dans le forum JDBC
    Réponses: 2
    Dernier message: 13/10/2005, 19h17
  5. [Exception]Lors d'un validate sur un jframe
    Par cameleon2002 dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 02/05/2005, 11h27

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