Comment accéder à Control.ViewState avec une sous-classe de contrôle ajoutée dynamiquement?
Question
Nous avons créé un contrôle qui doit conserver des données via la propriété ViewState de la classe Control. Nos sous-classes de classes contrôlent strictement l'accès à la propriété ViewState (elle est protégée sur l'objet Page). Nous ajoutons le contrôle à Page.Controls dans OnInit, puis nous essayons de définir la propriété ViewState dans OnPreLoad.
Lorsque nous décodons et examinons l'état ViewState de la page, nos valeurs n'ont pas été écrites et ne sont donc pas disponibles pour une extraction ultérieure.
Quelqu'un sait-il comment nous pouvons obtenir le contrôle pour participer au processus ViewState?
La solution
Le problème consiste à ajouter directement le contrôle à la page. Malheureusement, il est trop haut dans la hiérarchie des contrôles pour participer à la gestion des formulaires ViewState. Si vous ajoutez le contrôle à la collection de contrôles d’ASPNet Form, il participera avec succès à LoadViewStateRecursive et SaveViewStateRecursive.
Autres conseils
Essayez de créer votre contrôle dans OnInit, puis ajoutez-le à la page.Controls pendant OnLoad.
ViewState n'est chargé qu'après OnInit, mais avant OnLoad.
Voici un aperçu du cycle de vie d'une page ( GregMac ) publié dans une réponse à une question précédente de le mien.