Dans mon application ASP.NET, je suis en train de charger un .ascx dynamiquement à l'aide LoadControl, en utilisant le schéma suivant:Viewstate de ascx perdu entre postbacks
var ctrl = LoadControl("/path/to/control.ascx");
((ControlType)ctrl).SomeProperty = someData;
placeholder.Controls.Add(ctrl);
Le contrôle que j'ajoute enregistre la valeur de la propriété SomeProperty directement ViewState, comme suit:
public int? SomeProperty
{
get { return (int?)ViewState["SomeProperty"]; }
set { ViewState["SomeProperty"] = value; }
}
Après cela, la vie de contrôle ascx une vie propre et tout va bien jusqu'à ce que postback se produit. Lorsque la page affiche, soudainement l'état d'affichage est vide! Je suppose que cela se produit parce que je manipule le ViewState avant d'ajouter le ascx instancié à ma page. De plus, je peux empêcher la ViewState de se perdre en ajoutant la ligne suivante dans la méthode Page_Load()
de mon contrôle ascx:
SomeProperty = SomeProperty;
que je dois faire ce qui précède pour chaque propriété pour faire en sorte que le ViewState est préservée. Maintenant, y a-t-il une façon plus jolie de faire cela? Manipuler le ViewState après l'ajout du fichier .ascx instancié à la page n'est pas une option - J'ai besoin du contenu de ViewState dans les méthodes Page_Init()
et Page_Load()
, qui sont déclenchés dès que j'ajoute le fichier .ascx à ma page.
Merci.
J'ai rencontré un problème similaire une fois, et dans mon cas le problème était que dans notre page de base de tous les temps, nous avons défini tous les contrôles pour ne pas utiliser viewstate. Mon point est que l'ajout de contrôles dynamiquement pourrait ne pas être nécessairement le problème, mais des endroits cachés où viewstate est mis à désactivé. –