ASP.net ViewState - Même lorsqu'il est désactivé, certains viewstate existent. Pourquoi?

StackOverflow https://stackoverflow.com/questions/413558

  •  03-07-2019
  •  | 
  •  

Question

Même lorsque, sur la page, la propriété EnableViewState est désactivée, des états d'affichage sont toujours présents sur la page:

"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"

Ma question est pourquoi?

Était-ce utile?

La solution

Cela pourrait être des contrôles utilisant ControlState. Tout contrôle ayant un état de contrôle ignorera vos paramètres ViewState.

Autres conseils

C'est l'état de contrôle.

Si vous voulez vraiment vous débarrasser de viewstate et controlstate, vous pouvez utiliser ce code dans le code-behind de la page ou dans toute classe dont le code-behind dérive

.
class MyPage : Page {
    private class DummyPageStatePersister : PageStatePersister {
        public DummyPageStatePersister(Page p) : base(p) {}
        public override void Load() {}
        public override void Save() {}
    }
    private DummyPageStatePersister _PageStatePersister;
    protected override PageStatePersister PageStatePersister {
        get {
            if (_PageStatePersister == null)
                _PageStatePersister = new DummyPageStatePersister(this);
            return _PageStatePersister;
        }
    }

    // other stuff comes here
}

Faites très attention en faisant cela car vous violez le contrat avec les contrôles. MSDN indique explicitement que l'état de contrôle est toujours disponible. En pratique, cependant, cela a fonctionné pour moi.

Modifier: Depuis que j'ai été voté à la baisse, j'aime bien souligner à nouveau: Ne faites pas ceci à moins de savoir exactement ce que vous faites. Dans mon cas, la quasi-totalité de l'application était écrite en javascript côté client et, dans les rares cas où des publications étaient postées, j'utilisais toujours la collection Request.Form pour récupérer les valeurs. N'utilisez pas les contrôles côté serveur pour un rendu simple si vous procédez ainsi.

Cet article est un peu ancien mais, à ma connaissance, la plupart des points sont toujours valables:

  1. Si vous souhaitez utiliser ViewState, vous devez avoir une balise de formulaire côté serveur () dans votre page ASPX. Un champ de formulaire est requis pour que le champ masqué contenant les informations ViewState puisse être retransmis au serveur. De plus, il doit s'agir d'un formulaire côté serveur pour que l'infrastructure de page ASP.NET puisse ajouter le champ masqué lorsque la page est exécutée sur le serveur.
  2. La page elle-même enregistre une vingtaine d'octets d'informations dans ViewState, qu'elle utilise pour distribuer les données PostBack et les valeurs ViewState aux contrôles appropriés lors de la publication. Ainsi, même si ViewState est désactivé pour la page ou l’application, il est possible que quelques octets restent dans ViewState.
  3. Si la page n'est pas postée, vous pouvez supprimer ViewState d'une page en omettant la balise côté serveur.

http://msdn.microsoft.com/en-us/library /ms972427.aspx

Cet article est absolument fantastique sur ViewState si vous développez dans ASP.NET, lisez-le!

Helper ASP.NET ViewState est également un outil très utile pour savoir ce qui se passe. dans votre ViewState

Controlstate peut en être la cause. L'état de contrôle ne peut pas être désactivé. Dans ASP.NET 2.0, il existe une distinction entre les données nécessaires pour faire fonctionner un contrôle (controlstate) et les autres données (viewstate)

Et oui, certaines commandes ne fonctionnent pas sans controlstate. Si vous souhaitez savoir qui est à l'origine de ce problème ou ce que contient l'état d'affichage, consultez un viewstate viewer.

Les contrôles qui implémentent IPostBackEventHandler , tels que Zone de texte, Case à cocher, etc. . conservera l'état même après la désactivation du viewstate. La raison en est qu'au cours de l'étape de chargement des données de post-publication, ces contrôles obtiendront les informations d'état à partir du formulaire Posté.

Toutefois, des contrôles tels que label qui ne mettent pas en œuvre IPostBackEventHandler ne récupèrent aucune information d'état à partir des données postées et dépendent donc entièrement de viewstate pour maintenir l'état.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top