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

VB.NET Discussion :

Erreur méthode dynamique


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    Bonsoir,
    Je me permet de faire appel a l'un de vous car depuis quelques jours j'ai un problème avec une appli asp.net.

    En effet, je n'arrive pas à affecter une méthode dynamique à un imageButton. J'ai trouvé un extrait de code (sur ce site) que j'ai adapté a mon appli voila ce que ca donne :

    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 Sub ButtonSeek_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSeek.Click
    				...
            Dim deletePicture As New ImageButton()
            ...
            deletePicture.ID = myReader.GetInt32(0)  'Définit l'identifiant a supprimer, champs id de la requete sql
            AddHandler deletePicture.Click, AddressOf ImageDelete_Click ' Ajout un événement (onClick)
            ...
        End Sub
     
     
        ' Evenement qui permet de supprimer un livre ou quotidient
        Protected Sub ImageDelete_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
            Dim img As ImageButton = CType(sender, ImageButton)
            Try
                Dim myBook As New Book
                myBook.deleteBook(img.ID)
     
                ' Affiche un message de confirmation
                MsgBox("La suppression c'est déroulée avec succès", MsgBoxStyle.DefaultButton1, "Message de confirmation")
     
            Catch ex As Exception
                LabelError.Text = "La requete de suppression n'a pas pu fonctionner correctement. ERROR : "
                LabelError.Text &= ex.Message & " (" & ex.StackTrace() & ")"
            End Try
        End Sub
    Le problème est que je ne passe jamais dans la méthode ImageDelete_Click (même en mode pas a pas), de plus a chaque fois que je réutilise la méthode ButtonSeek_Click(), une exception est levée :

    Plusieurs contrôles avec le même ID '0' ont été trouvés. FindControl requiert que les contrôles aient des ID uniques.

    Quelqu'un pourrait-il m'aider ?

    alors ? personnes n'a une idée ? meme pas une doc, une aide, un exemple plus ou moins identique?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deletePicture.ID = myReader.GetInt32(0)
    Je pense que d'initialiser à 0 l'id d'un component n'est pas forcement une bonne idée, il est tout a fait possible qu'un autre component que tu utilise ai le même id.

    Il se peut même que tu ai fait 2 fois la meme affectation d'id dans ton code.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    J'initialise pas l'id a 0, je prend juste le champs 0 (id) d'une table de ma base de données lu avec myReader.

    En fait j'ai refait des tests chez moi en gardant que le strict minimum (création du bouton, addHandler, définition de la méthode) et rien n'y fait

  4. #4
    Rédacteur
    Avatar de benji_dv
    Homme Profil pro
    Architecte
    Inscrit en
    Juillet 2005
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 375
    Par défaut
    Bonjour,

    Perso, en ASP.NET, j'ajoute dynamiquement des méthodes mais... en utilisant du javascript et le principe du __doPostBack('','');

    Je m'explique,
    Lorsque tu fais un addHandler, tu ne fais qu'ajouter un gestionnaire évènement sur un objet. Tant que ton objet est en mémoire, le gestionnaire d'évènement existe. Une fois que ton serveur a fini le boulot, ta page n'existe plus sur le serveur...
    L'ajout dynamique de fonctionnalités passe par une gestion javascript de la chose en exploitant le __doPostBack...

    Pour comprendre :
    http://aspalliance.com/895_Understan...Function#Page2

    Bien à toi
    BenJ

    Rien ne tempèche donc de faire comme ceci :

    au premier chargement de ta page,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deletePicture.attributes("onclick") = "javascript:__doPostBack('ImageDelete_Click','');
    puis (au IsPostBack)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select case Request.Form("__EVENTARGUMENT")
    (ou Request.QueryString si Type==GET)
    et là tu traite pour "ImageDelete_Click" et tu renvoies vers ta méthode...

    ca a l'air compliqué, mais c'est assez simple en fait

    voilou
    BenJ
    Benjamin DEVUYST
    Et comme l'a dit Rick Osborne
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live"
    http://bdevuyst.developpez.com
    http://blog.developpez.com/bdevuyst
    www.bdevuyst.com

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 79
    Par défaut
    bon ben j'vais essayer comme ca alors. Mais c'est quand meme bizare car ca devrait fonctionner sans problème avec la méthode addhandler.

  6. #6
    Invité de passage
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Par défaut
    Met ton addhandler dans le CreateChildcontrol.
    Comme ça, le addhandler va être éxécuté une seul fois.

Discussions similaires

  1. Erreur méthode dynamique
    Par wind_vinch dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/05/2007, 10h56
  2. erreur tableaux dynamiques
    Par tarekcom dans le forum Langage
    Réponses: 2
    Dernier message: 06/05/2006, 23h32
  3. Erreur création dynamique de contrôle
    Par thierrybatlle dans le forum Access
    Réponses: 1
    Dernier message: 10/02/2006, 11h00
  4. [Firebird - D7] Erreur - Création dynamique d'une base
    Par EGI dans le forum Bases de données
    Réponses: 5
    Dernier message: 29/03/2005, 14h26
  5. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2005, 23h15

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