Comment obtenir la valeur de ViewState construit et codé?
https://stackoverflow.com/questions/1010
Full question
Vérifié
Question
Je dois récupérer la représentation codée en base64 du ViewState. Évidemment, cela ne serait disponible que tardivement dans le cycle de vie de la demande, ce qui est OK.
Par exemple, si le résultat de la page comprend:
<input type="hidden" name="__VIEWSTATE"
id="__VIEWSTATE" value="/wEPDwUJODU0Njc5MD...==" />
J'ai besoin d'un moyen côté serveur pour obtenir la valeur "/ wEPDwUJODU0Njc5MD ... =="
Pour clarifier, j'ai besoin de cette valeur lors du rendu de la page, pas sur PostBack. par exemple. J'ai besoin de connaître la valeur ViewState qui est envoyée au client, et non le ViewState que je reçois.
Solution
Rex, je suppose qu'un bon point de départ pour rechercher des solutions qui compressent le ViewState : ils saisissent ViewState sur le serveur avant qu'il ne soit envoyé au client et le gzipper. C'est exactement où vous voulez être.
Autres conseils
Voir ceci article de blog où l'auteur décrit une méthode pour redéfinir le comportement par défaut de la génération de ViewState et indique comment l'enregistrer sur l'objet Session du serveur.
Dans ASP.NET 2.0, ViewState est enregistré par un descendant de PageStatePersister classe. Cette classe est une classe abstraite pour enregistrer et charger ViewsState et il y a deux descendants implémentés de cette classe dans .Net Framework, nommé HiddenFieldPageStatePersister et SessionPageStatePersister. Par défaut HiddenFieldPageStatePersister est utilisé enregistrer / charger les informations ViewState, mais nous pouvons facilement obtenir le SessionPageStatePersister pour travailler et enregistrer ViewState dans l'objet Session.
Bien que je n’aie pas testé son code, il semble montrer exactement ce que vous voulez: un moyen d’avoir accès au code ViewState tout en restant sur le serveur, avant la publication.
J'ai activé la compression après des articles similaires à ceux publiés ci-dessus. La clé permettant d’accéder à ViewState avant que l’application ne l’envoie envoie surchargeait cette méthode;
protected override void SavePageStateToPersistenceMedium(object viewState)
Vous pouvez appeler la méthode de base dans ce remplacement, puis ajouter la logique supplémentaire nécessaire pour gérer ViewState.