J'ai un contrôle (par exemple, un DataGrid ou un ComboBox) qui est un enfant d'un contrôle utilisateur. Je veux DataBind à chaque requête, plutôt que de laisser son état persister à travers ViewState. Je dois laisser EnableViewState=true
cependant. Cela signifie, je pense, que j'ai besoin d'appeler DataBind avant que TrackViewState() soit appelé.Comment éviter la persistance des données via ViewState pour un contrôle enfant dans ASP.NET?
J'ai lu le blog fantastique TRULY Understanding ViewState et il répond à ma question en 4. Initializing child controls programmatically
. Cependant, les solutions de l'article ne sont pas idéales: créer dynamiquement des contrôles enfants (je ne suis pas et ne peux pas - trop de code existant), utilisez un code de tiers tiers (préfèrerais que ce soit en code-behind), et utilisez OnPreInit (qui "ne vous aide pas si jamais vous développez un contrôle").
Étant donné que cet article est plutôt ancien (vers 2006), j'espérais que les nouvelles versions d'ASP.NET corrigent la situation de sorte qu'il y ait de meilleures solutions maintenant. Alors, communauté, y a-t-il de BONNE façon de faire cela?
Le contrôle personnalisé ne prend pas en charge le fichier .aspx comme le contrôle utilisateur. Vous devez donc ajouter des contrôles enfants par programme. Etes-vous sûr que vous parlez de contrôle personnalisé ici? – Vitaly
Oui, sauf si ma sémantique est confuse. Un contrôle personnalisé est-il différent d'un contrôle utilisateur? J'ai un .aspx qui utilise un .ascx. Le .ascx utilise de manière déclarative une grille de données et une zone de liste déroulante, et je veux DataBind les sans persister les données dans ViewState. –
Oui, le contrôle personnalisé et le contrôle utilisateur sont différents. Le fichier ASCX signifie que vous avez le contrôle utilisateur. Pourquoi avez-vous besoin de garder EnableViewState = true? Vous avez juste besoin de le mettre à false et dans Page.Load ajouter des lignes pour initialiser DataSource et faire DataBind. – Vitaly