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 :

[.NET 2 C#] EnabledViewstate=false ne marche pas


Sujet :

ASP.NET

  1. #1
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut [.NET 2 C#] EnabledViewstate=false ne marche pas
    Bonjour,

    j'ai un hiddenfield sur un aspx qui stocke une valeur que j'incrémente à partir de plusieurs ascx qui sont contenu dans l'aspx.

    Je me suis rendu compte qu'après les postbacks la valeur de cet hiddenfield était conservée, j'ai donc mis enabledviewstate à false pour ce dernier, mais ca n'a rien changé, la valeur est toujours conservée à travers les postbacks.

    Du coup je réinitialise moi même la valeur après le chargement du viewstate mais c'est bidon.

    On ne peux pas désactiver le viewstate juste pour un contrôle?

    Merci

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Je penses que l'alimentation de ton HiddenFiled n'a rien avoir avec le ViewState.
    Dans ASP.Net 2, les champ de formulaire son ré-alimenté après un PostBack non pas par le viewState mais par les valeur dans la collection des POST.

    Pour faire ce que tu veux faire, je penses qu'en utilisant un champ Hidden HTML et en le mettant à runat=server, ça devrait fonctionner (il n'y a pas l'implémentation de la réalimentation de la valeur dans les HtmlControls)

  3. #3
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Désolé, mon post précédent est faux. Les HtmlControls remettent aussi la valeur du POST dans le champ :

    (source du HtmlInputHidden) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
        string text = this.Value;
        string text2 = postCollection.GetValues(postDataKey)[0];
        if (!text.Equals(text2))
        {
            base.ValidateEvent(postDataKey);
            this.Value = text2;
            return true;
        }
        return false;
    }

  4. #4
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Donc c'est non pas par le viewstate mais par la collection POST que mon champ hiddenfield est re-rempli...

    Je vais vérifier ca, par contre peut tu m'expliquer la différence entre le viewstate et la collection POST?

    Merci!!

  5. #5
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Ben la collection POST c'est le truc classique en HTTP. le contenu de tes champs de formulaire qui sont envoyés à la page cible.

    Le ViewState est propre à ASP.Net. C'est un mécanisme qui permet de garder les informations des contrôles ASP.Net d'un Post-Back à l'autre (utiliser pour les gridview, labels, ...). Les données sont sérialisées et stocker dans un champ Hidden de ta page.

  6. #6
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    le viewState est tout de même un "truc" assez obscure... il me semble que l'on ne peut pas vraiment le manipuler à notre guise, non ?
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  7. #7
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par kheironn
    le viewState est tout de même un "truc" assez obscure... il me semble que l'on ne peut pas vraiment le manipuler à notre guise, non ?
    Tout dépend de ce que tu appel manipuler
    Tu peux quand même pas mal intervenir dessus pour par exemple ne plus le mettre dans un champ hidden de ta page mais dans une variable de session (les pages sont ainsi moins lourdes mais au détriment des perfs serveur), où encore le crypter, le "chunked" (divisé en plusieurs morceaux), ...
    C'est assez souble si tu prends la peine d'implémenter ton propre ViewStateManager, mais bon bien sûr le codage est plus complexe...

  8. #8
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    Ben la collection POST c'est le truc classique en HTTP. le contenu de tes champs de formulaire qui sont envoyés à la page cible.
    D'accord pour ca, mais comment savoir pour un contrôle donné si il va être réaffecté par le viewstate ou la collection POST? Parce que la c'est de plus en plus flou pour moi...

    Dans les explications du cycle de vie de la page, il est dit que les contrôles sont réaffecté par le viewstate sur l'événement load_viewstate(ou un truc du genre). Du coup ce code la:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
        string text = this.Value;
        string text2 = postCollection.GetValues(postDataKey)[0];
        if (!text.Equals(text2))
        {
            base.ValidateEvent(postDataKey);
            this.Value = text2;
            return true;
        }
        return false;
    }
    Me fait douter de tout ce que je croyais avoir compris jusqu'ici

    A moins que après le décryptage du viewstate .NET affecte les valeurs à la collection POST?(n'importe quoi) Même si c'est comme ca ca n'explique pas le problème évoqué dans mon premier POST.

    mmhhh,perdu je suis dans les limbes du webform

  9. #9
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Les cotrôles qui POST des datas sont alimentés par leur contenu POST (cf PJ)
    Pour ton PB, vide toi même le contenu de champ hidden
    Images attachées Images attachées  

  10. #10
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    C'est bon, tout est clair dans mon esprit, après avoir regardé un peu le msdn,

    on voit que la persistance des données des contrôles est gérée par la collection POST si le contrôle implémente IPostBackDataHandler et IPostBackEventHandler, sinon c'est le viewstate qui s'en occupe.
    CQFD.

    je comprend vite mais il faut m'expliquer longtemps

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

Discussions similaires

  1. IE8 : return false ne marche pas
    Par teraDev dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/10/2010, 18h56
  2. <pages validateRequest="false"/> ne marche pas
    Par padej450 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 13/07/2010, 14h28
  3. Application.EnableEvents = False ne marche pas !
    Par statquant dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2009, 10h01
  4. TabSheet avec enabled à false ne marche pas?
    Par codial dans le forum Delphi
    Réponses: 8
    Dernier message: 06/03/2007, 12h46
  5. Réponses: 3
    Dernier message: 16/02/2007, 15h35

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