Asp.Net UserControls peut-il savoir s’ils sont ajoutés «en retard» à la hiérarchie des contrôles?

StackOverflow https://stackoverflow.com/questions/1423021

Question

J'ai un contrôle utilisateur qui utilise le paradigme standard if (! IsPostBack) {// s'initialise moi-même} pour éviter de refaire l'initialisation lors des publications (afin d'échanger moins de hits de base de données pour une utilisation accrue de ViewState ). Cette approche me sert bien la plupart du temps, mais il y a un endroit où je veux ajouter ce contrôle à la hiérarchie des contrôles 'en retard', au cours d'une publication.

Ceci, bien sûr, provoque l'échec de la logique d'initialisation et le rendu du contrôle dans un état non initialisé.

Quel garde dois-je utiliser pour déterminer si je dois initialiser, car ! IsPostBack ne le coupe pas? Je pourrais définir un drapeau pendant LoadViewState , mais cela semble un peu fictif. 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 y contribue. Une telle condition existe-t-elle?

[edit] Un exemple de pseudocode suit pour la page contenant:

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

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

Était-ce utile?

La solution 4

Les recherches ultérieures ne m'ont pas conduit à une solution générale à ce problème. J'ai fini par définir un indicateur dans Page_LoadViewState qui supprimait l'initialisation du contrôle, ce qui revient au même que la protection de l'initialisation avec ! IsPostBack , mais un peu plus précis. / p>

Autres conseils

Ne pouvez-vous pas utiliser le constructeur pour initialiser vos contrôles enfants? (ou créez une méthode Initialize) Ensuite, vous contrôlez le moment où le contrôle est initialisé.

Cela vous aidera peut-être à comprendre votre problème: “… Et si un contrôle est créé dans un gestionnaire d'événements et ajouté dynamiquement à l'arborescence des contrôles? Dans ce cas, le contrôle joue le rattrapage. Dès qu'il est ajouté à l'arbre de contrôle, il commence à exécuter ses phases jusqu'à atteindre la phase en cours de la page… "

Plus d'informations ici:

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

Il n’existe pas vraiment de concept d’ajout de contrôle pour le " first " N'oubliez pas que chaque fois que vous demandez une page, un nouvel objet de page est créé, avec toutes les nouvelles commandes. Les instances de contrôle précédemment créées ne sont pas ajoutées à votre nouvel objet de page.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top