0 votes

Les contrôles utilisateur d'Asp.Net peuvent-ils savoir s'ils sont ajoutés "en retard" à la hiérarchie des contrôles ?

J'ai un contrôle d'utilisateur qui utilise la fonction standard if(!IsPostBack){//initialize myself} afin d'éviter de refaire l'initialisation pendant les retours en arrière (ce qui revient à échanger moins de consultations de la base de données contre une utilisation accrue du ViewState). Cette approche me convient la plupart du temps, mais il y a un endroit où je veux ajouter ce contrôle à la hiérarchie des contrôles "tardivement", pendant un postback.

Bien entendu, cela fait échouer la logique d'initialisation et le contrôle est rendu dans un état non initialisé.

Quelle garde dois-je utiliser pour déterminer si je dois initialiser, puisque !IsPostBack n'est pas suffisant ? Je pourrais mettre un drapeau pendant LoadViewState mais cela semble un peu bricolé. Ce que j'aimerais trouver, c'est une condition qui ne se produit que lorsqu'un contrôle est ajouté pour la première fois à la hiérarchie des contrôles, et une clé pour cela. Une telle condition existe-t-elle ?

[Un exemple de pseudocode est présenté ci-dessous pour la page d'accueil :

protected void Page_Prerender(object sender, EventArgs e)
{
    Controls.Add(LoadControl("some_control.ascx"));
}

Existe-t-il un moyen pour some_control pour savoir qu'il a été ajouté tardivement ?

0voto

Ralf de Kleine Points 5476

Ne pouvez-vous pas utiliser le constructeur pour initialiser vos contrôles enfants ? (ou créer une méthode Initialize) Vous pouvez alors contrôler quand le contrôle est initialisé.

0voto

Jean-Francois Points 737

Peut-être cela vous aidera-t-il à comprendre votre problème : " que se passe-t-il si un contrôle est créé dans un gestionnaire d'événements et ajouté dynamiquement à l'arbre des contrôles ? Dans ce cas, le contrôle fait du rattrapage. Dès qu'il est ajouté à l'arbre de contrôle, il commence à exécuter ses phases jusqu'à ce qu'il atteigne la phase actuelle de la page "

Plus d'informations ici :

http://weblogs.asp.net/vga/archive/2003/08/11/23498.aspx

0voto

womp Points 71924

Il n'y a pas vraiment de concept d'ajout d'un contrôle pour la "première" fois, car rappelez-vous qu'à chaque fois que vous demandez une page, un contrôle de type nouveau L'objet page est créé, avec toutes les nouveau les instances de contrôle. Les instances de contrôle précédemment créées ne sont pas ajoutées à votre nouvel objet page.

Pourquoi la logique d'initialisation échoue-t-elle ? Peut-être que si vous affichiez ce code, nous pourrions suggérer quelque chose - il ne semble pas que cela doive nécessairement être le cas.

0voto

Dan Davies Brackett Points 6082

Des recherches supplémentaires ne m'ont pas permis de trouver une solution générale à ce problème. Ce que j'ai fini par faire, c'est mettre un drapeau dans le fichier Page_LoadViewState qui a supprimé l'initialisation du contrôle - ce qui revient à protéger l'initialisation avec la commande !IsPostBack mais un peu plus précis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X