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 :

[IPostBackDataHandler] implémentation de LoadPostData n'est pas exécuté


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut [IPostBackDataHandler] implémentation de LoadPostData n'est pas exécuté
    Bonjour à tous,

    je me suis fait un petit control mais malheureusement je n'arrive pas a récupérer la valeur d'une propriété public autrement que par Page.Request.Form.Get()

    Je voulais plutot implémenter IPostBackDataHandler, mais quoi que je fasse dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            public bool LoadPostData(String postDataKey, NameValueCollection values)
    le code n'est pas éxécuté

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Points : 73
    Points
    73
    Par défaut
    post le code de tout ton controle ...

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut
    excusez mon manque de clarté, donc, voilà ce que je fais

    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
     
     
        public class Compteur : Control
        {
            public int ValeurChrono
            {
                get
                {
    		return Convert.ToInt32(Page.Request.Form.Get(this.UniqueID + "_hiddenChrono"));
                }
            }
     
            protected override void CreateChildControls()
            {
                if (ChildControlsCreated)
                    Controls.Clear();
     
                HtmlInputHidden HideChronoValue = new HtmlInputHidden();
                HideChronoValue.ID = this.UniqueID + "_hiddenChrono";
                HideChronoValue.Value = OldValue;
     
    		//etc...etc...
     
                Controls.Add(HideChronoValue);
            }
        }

    et voilà ce que j'aimerais faire

    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
     
        public class Compteur : Control , IPostBackDataHandler
        {
            private string HideValue;
     
            public int ValeurChrono
            {
                get
                {
                        return Convert.ToInt32(HideValue);
                 }
            }
     
    	public virtual bool LoadPostData(string postDataKey,NameValueCollection postCollection) {
     
    	   String postedValue = postCollection[postDataKey];
     
    	   if (HideValue == null || !HideValue.Equals(postedValue)){
    	      HideValue = postedValue;
    	      return true;
    	   }
     
    	   return false;
    	}
     
            public void RaisePostDataChangedEvent()
            {
     
                // Part of the IPostBackDataHandler contract.  Invoked if we ever returned true from the
                // LoadPostData method (indicates that we want a change notification raised).  Since we
                // always return false, this method is just a no-op.
            }
     
            protected override void CreateChildControls()
            {
                if (ChildControlsCreated)
                    Controls.Clear();
     
                HtmlInputHidden HideChronoValue = new HtmlInputHidden();
                HideChronoValue.ID = this.UniqueID + "_hiddenChrono";
                HideChronoValue.Value = OldValue;
     
    		//etc...etc...
     
                Controls.Add(HideChronoValue);
            }
        }

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut Code minimal
    Avec aussi peu de code, c'est dur de t'aider.... Heu désolé, je viens de voir que tu as posté une réponse entre temps ...

    Voici le codeminimal pour implémenter IPostBackDataHandler

    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
     
     
    public class NomControler : WebControl, IPostBackDataHandler {
     
           public virtual bool LoadPostData(String postDataKey, System.Collections.Specialized.NameValueCollection values) {
                bool isModified = false;
                ....
                return isModified;
            }
     
            public event EventHandler TextChanged;
     
            public virtual void RaisePostDataChangedEvent() {
                OnTextChanged(EventArgs.Empty);
            }
     
     
            protected virtual void OnTextChanged(EventArgs e) {
                if (TextChanged != null)
                    TextChanged(this, e);
            }
    }
    Autre point important (d'après ce que j'ai constaté) ton objet WEB DOIT avoir un champ input (même de type hidden si besoin) dont l'attribut name correspond à ID de ton objet, sinon aucun appel de cette méthode

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Je ne suis pas sûr, mais je pense que cela viens de l'objet HTML qui dont l'ID est fixé à this.UniqueID + "_hiddenChrono";

    Déjà, lil faudrait renseigner Name pour le POST ... A ma connaissance lors du POST les ID sont ignorés

    Ensuite, ajouter si il n'existe pas un champ caché dont Name vaut this.UniqueID sinon tu n'auras jamais d'appel (je crois)

    ensuite tu peux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String postedValue = postCollection[postDataKey + "_hiddenChrono"];

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut
    Tous dabord, merci de te pencher sur mon problème

    donc, après avoir lu tes remarques, voilà ma class
    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
     
        public class Compteur : Control , IPostBackDataHandler
        {
            private string HideValue;
     
            public int ValeurChrono
            {
                get
                {
                    return Convert.ToInt32(HideValue);
                }
            }
     
            public virtual bool LoadPostData(String postDataKey, System.Collections.Specialized.NameValueCollection values)
            {
                bool isModified = false;
                String postedValue = values[postDataKey];
     
                if (HideValue == null || !HideValue.Equals(postedValue))
                {
                    HideValue = postedValue;
                    isModified = true;
                }
     
                return isModified;
            }
     
            public event EventHandler TextChanged;
     
            public void RaisePostDataChangedEvent()
            {
                OnTextChanged(EventArgs.Empty);
            }
     
            protected virtual void OnTextChanged(EventArgs e)
            {
                if (TextChanged != null)
                    TextChanged(this, e);
            }
     
            protected override void CreateChildControls()
            {
                if (ChildControlsCreated)
                    Controls.Clear();
     
                HtmlInputHidden DotNetObjId = new HtmlInputHidden();
                DotNetObjId.Name = this.ID;
     
                HtmlInputHidden HideChronoValue = new HtmlInputHidden();
                HideChronoValue.ID = this.UniqueID + "_hiddenChrono";
                HideChronoValue.Value = HideValue;
     
                Controls.Add(HideChronoValue);
                Controls.Add(DotNetObjId);
            }
        }
    malheureusement le code de la méthode LoadPostData n'est tjr pas executé(j'ai mis un pts d'arrêt sur la déclaration du bool, mais rien ne se passe)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 123
    Points : 85
    Points
    85
    Par défaut
    Quel est le code HTML généré par ton controle ?

    Il y a peut être une anomalie dedans...

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 128
    Points : 67
    Points
    67
    Par défaut
    Ayè ça marche !!! MERCI

    ça venais bien du manque d'input avec name=this.UniqueID(HtmlInputHidden DotNetObjId) ET AUSSI du fait que je n'avait pas renseigné le name de mon champs caché(HtmlInputHidden HideChronoValue)

    merci encore

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

Discussions similaires

  1. php n'est pas exécuté
    Par ballantine's dans le forum Langage
    Réponses: 8
    Dernier message: 26/03/2009, 11h40
  2. Mon code behind n'est pas exécuté sous Visual Web
    Par mourmaux dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/09/2008, 19h07
  3. [Spring MVC] onSubmit n'est pas exécuté
    Par napol1fr dans le forum Spring Web
    Réponses: 1
    Dernier message: 30/05/2008, 12h03
  4. Une partie du code n'est pas exécutée
    Par eddy37fr dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/03/2008, 19h11
  5. [AJAX] Javascript n'est pas exécuté avec ajax.
    Par John6281 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/02/2007, 14h35

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