8
votes

Comment obtenir le contrôle de l'événement ASP.NET PREINIT?

Comment obtenir le contrôle de l'événement ASP.NET PREINIT? Les pointeurs sont NULL et la méthode de FindControl renvoie NULL.

J'utilise des pages de maîtrise et de contenu. Le balisage de la page de contenu ressemble à ceci: xxx

et code comme celui-ci: xxx

donc la table est toujours null après Ceci.FindControl ("Tableau1"). NamingContainer de la page est aussi NULL. Qu'est-ce que je fais mal?

Mise à jour Je dois utiliser cet événement pour créer des contrôles. Comme indiqué dans le ASP.NET Page Vue d'ensemble du cycle de vie Cet événement devrait être utilisé pour la création de contrôle dynamique. J'ai besoin de créer une liste de liens dans ma table. Peut-être qu'il y a une autre façon de le faire?


3 commentaires

Je ne suis pas sûr de ce que vous faites mal. Devez-vous utiliser l'événement Preinit? Pouvez-vous utiliser un événement ultérieur comme init?


Comme Matthew dit qu'un événement ultérieur pourrait vous convient mieux. Je soupçonne que c'est à init que beaucoup de contrôles se posent réellement ensemble, donc si vous essayez d'accéder aux choses trop tôt dans le cycle de vie, tout tombe en morceaux. msdn.microsoft.com/en-us/library/ms178472.aspx Peut-être utile si vous n'avez pas déjà vu.


Ayant lu votre édition, j'ajoute généralement des choses à l'arborescence de contrôle de l'événement de page_load. Je ne sais pas ce que cette section que vous avez citée fait référence à être honnête mais je ne pense pas que cela signifie simplement ajouter un lien vers une page ...


4 Réponses :


5
votes

Le préinit est tiré avant que les commandes soient initialisées. Lisez sur le ASP.NET Cycle de vie de la page pour des informations plus détaillées.

init
Surélevé après que tous les contrôles ont été initialisés et toute peau les paramètres ont été appliqués. L'init L'événement de contrôles individuels se produit avant l'événement initial de la page.

Utilisez cet événement pour lire ou initialiser Propriétés de contrôle.


0 commentaires

1
votes

dans l'événement Preinit (), les contrôles standard (définis) n'ont pas encore été créés à ce stade, vous ne pouvez donc obtenir aucune référence à des contrôles.

Utilisez l'événement de page_load () pour créer des commandes dynamiques. Pendant cet événement, vous pouvez ajouter des contrôles dynamiques dans des contrôles existants.

Après avoir créé les commandes dynamiques dans la pageLoad (), utilisez le préerender () pour apporter des modifications / mises à jour.

Personnellement, j'utilise Preinit pour définir des objets larges de la page (c.-à-d. Connexions de base de données, objets de session utilisateur) et où j'effectue des contrôles d'authentification de sécurité (et des redirections si non autorisées) uniquement.


0 commentaires

1
votes

L'événement Preinit de la page est déclenché avant que les commandes soient initialisées, les commandes n'existent pas encore. Vous devrez accéder au contrôle d'un événement ultérieur, tel que l'événement de charge de la page. S'il vous plaît voir http://msdn.microsoft.com/en-us/library/ms178472 .aspx .


0 commentaires

0
votes

Il y a une différence entre les pages avec ou sans page principale comme expliqué Ici dans la question et les réponses.

sans page maître Vous pouvez créer des contrôles dans l'événement Preinit et les ajouter à un contrôle existant, mais avec une page maître, vous ne pouvez pas encore accéder aux contrôles existants, comme expliqué dans les réponses ici, vous devez donc créer des contrôles dynamiques dans un événement ultérieur comme l'événement Init.

Étant donné que vous utilisez une page maître, vous devez créer vos contrôles dynamiques dans un événement ultérieur, comme l'événement Init ou essayer l'option donnée là-bas par Valio.


0 commentaires