Contrôles serveur Web dynamiques et état d'affichage
Mise à jour : novembre 2007
Lorsqu'un contrôle serveur Web est créé de façon dynamique au moment de l'exécution, certaines informations sur le contrôle sont stockées dans l'état d'affichage rendu avec la page. Toutefois, lorsque la page est publiée en retour sur le serveur, les contrôles non dynamiques (définis sur la page) sont instanciés dans l'événement Init et les informations sur l'état d'affichage sont chargées pour que les contrôles dynamiques puissent être recréés (en général dans le gestionnaire Page_Load). En fait, avant que les contrôles dynamiques soient recréés, l'état d'affichage est temporairement désynchronisé des contrôles de la page. Après l'exécution de l'événement Page_Load et avant que les méthodes de gestion d'événements ne soient appelées, le reste des informations sur l'état d'affichage est chargé dans les contrôles créés de façon dynamique.
Dans la majorité des cas, ce modèle de traitement des états d'affichage fonctionne très bien. En général, vous ajoutez des contrôles dynamiques à la fin d'une collection de contrôles d'un conteneur. Les informations sur l'état d'affichage stockées pour les contrôles dynamiques sont donc des informations supplémentaires situées à la fin de la structure de l'état d'affichage pour le conteneur approprié. La page peut ignorer ces informations jusqu'à ce que les contrôles soient créés.
Toutefois, les informations sur l'état d'affichage des contrôles créés de façon dynamique peuvent représenter un problème dans deux cas :
Lorsque vous insérez des contrôles dynamiques entre des contrôles existants.
Lorsque vous insérez des contrôles de façon dynamique et que vous les réinsérez lors d'un aller-retour avec des valeurs différentes.
Si vous insérez des contrôles dynamiques entre des contrôles existants, les informations sur l'état d'affichage du contrôle dynamique sont insérées à l'emplacement correspondant de la structure de l'état d'affichage. Lorsque la page est publiée et que l'état d'affichage est chargé, le contrôle dynamique n'existe pas encore ; ainsi, les informations supplémentaires de l'état d'affichage ne correspondent pas au bon contrôle. Le résultat est généralement une erreur indiquant un cast non valide.
Si vous réinsérez des contrôles lors de chaque aller-retour, chaque génération de contrôles créés de façon dynamique récupère les valeurs de propriété de l'état d'affichage de l'ensemble de contrôles précédent. Dans de nombreux cas, vous pouvez éviter ce problème en attribuant la valeur false à la propriété EnableViewState du contrôle conteneur. Dans ce cas, aucune information sur le contrôle dynamique n'est enregistrée et aucun conflit ne se produit avec les versions successives des contrôles.
Pour plus d'informations sur l'état d'affichage, consultez
Vue d'ensemble du cycle de vie des pages ASP.NET
Vue d'ensemble de la gestion d'état ASP.NET et ViewState.
Voir aussi
Autres ressources
Ajout de contrôles ASP.NET par programme
Définition des propriétés des contrôles serveur ASP.NET par programme