Stockage d'une List<int> dans l'état d'affichage
J'ai une page aspx qui est la suivante:
- Un répéteur avec un linkbutton dans chaque
- Le bouton de lien a un commandargument d'une valeur entière
- Un contrôle utilisateur
L'idée est que lorsque l'utilisateur clique sur le linkbutton la valeur de la commandarguement est stocké dans une Liste. Pas de problème, vous pensez peut-être, cependant j'ai besoin de la valeur à stocker dans une Liste dans le contrôle usercontrol, pas dans la page ASPX. La Liste doit être conservé à travers les publications, il doit également être stockés dans le viewstate.
J'ai donc créé une propriété publique dans le contrôle de l'utilisateur comme suit:
public List<int> ImageString {
get {
if (this.ViewState["ImageString"] != null) {
return (List<int>)(this.ViewState["ImageString"]);
}
return new List<int>();
}
set { this.ViewState["ImageString"] = value; }
}
Et puis j'espérais qu'à partir de ma page aspx, je pourrais ajouter une ligne de code à ajouter une valeur à la liste comme suit:
this.LightBoxControl.ImageString.Add(value);
Le problème, je vais arriver, c'est que la valeur est en fait jamais ajouté à la liste. Le compteur est toujours à zéro.
Je suis sûr que c'est juste que j'ai défini la propriété de mal, mais je ne suis pas sûr de savoir comment le droit..
Toute aide serait grandement appréciée.
Merci
Al
OriginalL'auteur higgsy | 2011-09-08
Vous devez vous connecter pour publier un commentaire.
Votre getter est mauvais. C'est la variante correcte:
Ici vous vérifiez d'abord si il ya quelque chose dont vous avez besoin dans ViewState déjà, et si il n'y est pas, vous l'ajoutez. Ensuite, vous revenez à l'élément de ViewState - il est garanti d'être là.
Votre solution est mauvaise, parce qu'elle n'a pas lieu
new List<int>()
dans le ViewStateOriginalL'auteur Michael Sagalovich