2009-03-09 7 views
1

Voici les bases de ma configuration:Propriétés Asp.net BasePage utilisant ViewState sont effacées lors de la publication

J'ai une classe BasePage qui hérite de System.Web.UI.Page. BasePage a deux propriétés implémentées telles que leur get/set le fait à partir de deux éléments différents dans la collection ViewState (ex this.ViewState ["Year"] à partir de la BasePage).

J'ai une autre classe qui hérite alors de BasePage, appelons-la SpecificBasePage.

Enfin, j'ai une page aspx qui hérite de SpecificBasePage. J'ai ajouté des points de rupture et fait beaucoup de pas dans mon code et j'ai constaté que lors du chargement de la page initiale, les deux propriétés d'état d'affichage ont des valeurs assignées et les valeurs persistent tout au long du cycle de chargement de la première page. Lorsque la page est publiée en revanche, au cours de l'événement Page_Load et d'autres gestionnaires d'événements (lorsque le ViewState doit être chargé), les deux propriétés renvoient la valeur null.

L'inspection this.ViewState.Count montre qu'il n'y a aucun objet dans la collection.

Quelqu'un peut-il penser à quelque chose que je pourrais faire quelque part qui affecterait ViewState et entraînerait ce comportement?

--Addition Je l'ai isolé à une partie de mon code. Sur la charge initiale, je donne les valeurs de propriétés viewstate dans OnInit, j'ai trouvé que lorsque je déplace cela vers OnLoad, les valeurs persistent à travers la publication. Je suppose que même si les valeurs d'état d'affichage ajoutées persistent tout au long du cycle de vie de la page initiale, elles sont abandonnées dans le post-retour?

Répondre

4

Les pages peuvent avoir EnableViewState = false sur le ASPX

pourrait également être désactivé sur le web.config de l'application, ou même pour l'ordinateur d'ensemble sur l'élément.

Mise à jour 1: Sur le cycle de vie asp.net, ViewState est chargé après Init et avant le chargement more info. Voir comme n'importe quoi sur init est considéré comme faisant partie de la déclaration de la page. Plus tard, asp.net chargera le viewstate, et après cela, il commencera à suivre les modifications apportées à viewstate. C'est après cela que asp.net verra une différence entre les informations initiales sur viewstate et les informations modifiées, donc le déplacer pour charger évite le problème (comme l'état initial n'est pas là, et le nouvel état est tout ce que vous mettez sur viewstate) . À partir du lien ci-dessus:

« La raison est que la classe StateBag ne suit que des modifications à ses membres après sa méthode TrackViewState() a été invoquée C'est, si vous avez un StateBag, tout et. tous les ajouts ou modifications qui sont apportées avant TrackViewState() est faite ne sera pas enregistré lorsque la méthode SaveViewState() est invoqué. le TrackViewState() méthode est appelé à la fin de la phase d'initialisation , ce qui arrive après l'étape d'instanciation. Par conséquent, les propriétés initiales missions dans l'instanciation scène tout écrit au ViewState dans l'ensemble de propriétés des accesseurs-sont pas conservées lors de l'appel de méthode SaveViewState() dans le sauver vue scène de l'Etat, parce que le méthode TrackViewState() n'a pas encore été invoquaient. »

+0

Merci pour la réponse. J'ai fait une recherche sur EnableViewState à l'échelle du projet, et j'ai eu quelques contrôles, mais aucun sur cette page, et aucun dans le web.config – spilliton

0

Comme je l'ai dit dans la première partie ajoutée plus tard, vous pouvez apparemment pas régler quoi que ce soit dans l'état d'affichage avant chargement de la page, QUOIQUE Asp.net n » t lancer une erreur et il existera dans l'état d'affichage tout au long du cycle de vie de la page initiale, il ne sera pas persis t sur le cycle de vie du courrier suivant.

0

Regardez où vous définissez les valeurs ViewState. Éventuellement, allumez votre événement OnUnload et inspectez l'objet ViewState juste pour vous assurer que les valeurs sont réellement définies.

Questions connexes