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 :

[VB.NET] Multiple controls avec le même ID 'div' trouvés.


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Par défaut [VB.NET] Multiple controls avec le même ID 'div' trouvés.
    Bonjour,

    j'ai développer une page web en vb.net, dans laquelle j'affiche la liste des produits.
    Histoire de rendre le tout un peu plus joli, j'ai utilisé l'effet accordeon de jquery.

    Donc dans mon code behind, je crée dynamiquement, en fonction des produits récupérés par ma requête sql, les controls :
    -LiteralControl pour les ouvertures et fermetures de div
    - photos

    Ca marche très bien...jusqu'à ce que :

    - l'utilisateur me demande de pouvoir afficher les produits par catégorie.

    Ni une, ni deux, je crée dynamiquement mon bouton pour chacune de mes catégorie.

    La page se charge bien, j'ai mes boutons pour les différentes catégories, mon effet accordeon sur ma liste de produit, ca marche nickel!!!

    Même un F5 (page refresh) fonctionne.

    Sauf que, en cliquant sur n'importe lequel des boutons, je reçois l'erreur suivante :

    Multiple controls with the same ID 'div' were found. FindControl requires that controls have unique IDs.
    J'ai fouillé le code de ma page, aucune trace d'un "findcontrol". Je ne sais pas ou chercher cette erreur.

    Quel évènement peut provoquer cela?

    Je ne sais même quelles infos pourraient vous être utiles pour m'aiguiller!

    Va comprendre!

    J'espère que quelqu'un pourra me mettre sur la piste, n'hésitez pas à me demande du code si vous avez une idée

    Cordialement,
    Tommy

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Par défaut
    Est-ce que la trace de la pile peut-être un départ ?

    [HttpException (0x80004005): Multiple controls with the same ID 'div' were found. FindControl requires that controls have unique IDs.]
    System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection controls) +273
    System.Web.UI.Control.FillNamedControlsTable(Control namingContainer, ControlCollection controls) +320
    System.Web.UI.Control.EnsureNamedControlsTable() +61
    System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +222
    System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +327
    System.Web.UI.Control.FindControl(String id, Int32 pathOffset) +327
    System.Web.UI.Page.FindControl(String id) +38
    System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +232
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1434

  3. #3
    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 : 42
    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 affectes a priori le même ID "div" à tous tes boutons.
    Or, tes boutons semblent être des contrôles serveur. Il faut donc que leurs ids soient différents.
    Donne leur plutôt une cssClass identique et sert toi de cette class côté jquery plutôt que d'utiliser un ID.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Par défaut
    J'y avais aussi pensé, c'est pourquoi chacun de mes boutons à un ID différent.

    Par contre, la fonction accordeon est codé avec des id multiple (pas des class), mais ce ne sont pas des controles, ou bien?

    Mais a quel moment intervient ce "findcontrol" qui plante, car comme dit, je n'en utilise nullpart dans cette partie du code.

    Ce que je fais, c'est :
    J'ai parametrer la propiété "Postbackurl" de chacun de mes boutons pour qu'il pointe vers la même page en lui passant le Nr de ma categorie qui est utilisé dans ma requete sql.

    Et comble de tous cela, c'est qu'au premier chargement, la page est chargée avec le Nr de ma première catégorie.

  5. #5
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    La méthode FindControl est surement appelée qq part par le framework.
    Recherche plutôt à quel endroit tu assignes la valeur 'div'

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 97
    Par défaut
    Voici mon code behind de la page en question :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim produittableadapter As New dataset1TableAdapters.PRODUITSTableAdapter()
            Dim ds As New DataSet()
     
            Dim sql As String
            Dim connetionString As String = ConfigurationManager.ConnectionStrings("BIOTYFULConnectionString").ConnectionString
            Dim connection As SqlConnection
            Dim command As SqlCommand
            Dim adapter As New SqlDataAdapter
     
            connection = New SqlConnection(connetionString)
            sql = "SELECT ID_categorie, NOM_categorie, DESC_categorie FROM CATEGORIE"
     
            Try
                connection.Open()
                command = New SqlCommand(sql, connection)
                adapter.SelectCommand = command
                adapter.Fill(ds, "Cat")
                adapter.Dispose()
                command.Dispose()
                connection.Close()
            Catch ex As Exception
                'Label1.Text = "La connexion au serveur n'a pas pu être établie."
            End Try
     
     
     
            For Each ligne As DataRow In ds.Tables("Cat").Rows
                Dim btn_cat As New Button()
                btn_cat.Height = 50
                btn_cat.Width = 150
                btn_cat.ID = "ID_" & ligne.Item("ID_categorie")
                btn_cat.PostBackUrl = "soins.aspx?id=" & ligne.Item("ID_categorie").ToString
                btn_cat.Text = ligne.Item("NOM_categorie")
                btn_cat.CommandArgument = ligne.Item("ID_categorie")
                'AddHandler btn_cat.Click, AddressOf choixcat_click
                Panel2.Controls.Add(btn_cat)
            Next
     
            ma_categorie = Request.QueryString("id")
     
            If ma_categorie = "" Then
                ma_categorie = "6"
            End If
     
            Dim produitDATA As dataset1.PRODUITSDataTable = produittableadapter.GetDataByprod_cat(ma_categorie)
     
            Dim div As New LiteralControl
            div.ID = "div"
            div.Text = "<div id ='accordion'>"
            Panel1.Controls.Add(div)
     
            Dim i As Integer
            For i = 0 To produitDATA.Rows.Count - 1
                Dim prix As String = produitDATA.Rows(i).Item(6).ToString
                If produitDATA.Rows(i).Item(6).ToString = "" Then
                    prix = "0,00"
                Else
                    prix = FormatCurrency(CType(produitDATA.Rows(i).Item(6).ToString, Decimal))
                End If
     
                Dim titre As New LiteralControl
                titre.ID = "titre" & i + 1
                titre.Text = "<h3><a href='#'><div id='titreproduit_pdt'> " _
                & produitDATA.Rows(i).Item(1).ToString _
                & "</div>" & " " _
                & "<div id='typepeau_pdt'>" & produitDATA.Rows(i).Item(7).ToString & "</div>" _
                & "<div id='dureesoin_pdt'>" & produitDATA.Rows(i).Item(8).ToString & "</div>" _
                & "<div id='prix_pdt'>" & prix & "</div>" _
                & "</a></h3>"
                Panel1.Controls.Add(titre)
     
                Dim div3 As New LiteralControl
                div3.ID = "div"
                div3.Text = "<div>"
                Panel1.Controls.Add(div3)
     
                Dim photo As New Image()
                photo.ID = i + 1
                photo.Height = 100
                photo.Width = 100
                photo.ImageUrl = produitDATA.Rows(i).Item(5).ToString
                Dim deb_content As New LiteralControl
                deb_content.ID = "p"
                deb_content.Text = "<p><div id='photoproduit_pdt' style='float : left;'> "
                Panel1.Controls.Add(deb_content)
                Panel1.Controls.Add(photo)
     
                Dim fin_content As New LiteralControl
                fin_content.ID = "p"
                fin_content.Text = "</div>" & " " _
                & produitDATA.Rows(i).Item(3).ToString & "</p>"
                Panel1.Controls.Add(fin_content)
     
     
                div = New LiteralControl
                div.Text = "</div>"
                Panel1.Controls.Add(div)
     
            Next i
     
            Dim div2 As New LiteralControl
            div2.ID = "div"
            div2.Text = "</div>"
            Panel1.Controls.Add(div2)
     
        End Sub
    Je met tout à l'heure le code source généré à l'execution de la page. Peut-être la réponse s'y trouve

Discussions similaires

  1. [XSD] multiple élément avec le même nom invalide
    Par ToTEm39 dans le forum Valider
    Réponses: 2
    Dernier message: 30/03/2015, 14h46
  2. [Security] Multiple connexion avec le même role
    Par Mom's dans le forum Spring
    Réponses: 0
    Dernier message: 03/05/2011, 12h48
  3. [VB.NET] Création de control avec visual studio
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/08/2007, 18h06
  4. [VB.NET] Comment récupérer le nom d'un control avec le focus
    Par jayce007 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/01/2005, 00h53
  5. [VB.NET] ForeColor d'un control avec Enabled=False
    Par jennings dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/12/2004, 14h41

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