2008-09-05 7 views
3

J'ai un site web dans asp.net qui utilise une page maître. Dans cette page maître, j'ai un contrôle multiview avec une vue qui a tout le contenu pour les pages de contenu et une vue qui a un certain contenu local à la page maître où je montre des messages d'erreur de toutes les pages de contenu.Pourquoi mon contrôle Web est-il nul?

Dans cette vue d'erreur, j'ai un contrôle d'étiquette asp.net qui affiche les messages d'erreur. Habituellement, l'étiquette fonctionne bien, mais dans quelques cas, l'étiquette est null, ce qui rend une exception NullReferenceException. Maintenant j'ai traité ce cas en vérifiant si l'étiquette est nulle avant de l'utiliser, mais ma question est toujours:

Pourquoi cette étiquette est-elle nulle? Quelles sont les circonstances qui peuvent générer cela?

EDIT: Dans la page maître, j'ai une méthode appelée SetErrorText qui prend une chaîne et définit l'étiquette. J'appelle cette méthode à partir de la méthode Page_Load des pages de contenu, et cela fonctionne généralement bien. Dans tous les cas sauf deux (que j'ai découvert jusqu'à présent), l'étiquette est initialisée, et rien ne sépare ces deux cas de tous ceux qui fonctionnent.

En outre, tous les autres contrôles de la page maître sont initialisés, tels que le contrôle View qui héberge l'étiquette.

Lorsque la page Page_load d'une page de contenu défile, la page maître doit être remplie.

Répondre

4

Il semblerait que le problème soit dû au manque de rigueur. Quelqu'un a oublié de supprimer les contrôles de contenu générés automatiquement que Visual Studio place sur toutes les pages de contenu où la page maître a un contrôle ContentPlaceHolder.

Si une page de contenu a un contrôle de contenu, tous les contrôles qui sont placés dans le contrôle ContentPlaceHolder sur la page maître seront null, semble-t-il.

1

De quelle méthode de la page principale accédez-vous à l'étiquette? Selon l'étape du cycle de vie de la page, le contrôle d'étiquette n'a peut-être pas encore été chargé.

0

J'ai eu une erreur très similaire. Dans mon cas, il a été provoqué par wierdness compilateur .NET lié au fichier du concepteur de contrôle. Même si le fichier du concepteur a les contrôles définis correctement, supprimez-le, recréez-le et reconstruisez-le (assurez-vous de reconstruire, ne pas simplement «construire»). Voir la première réponse ici pour savoir comment faire régénérer le fichier de concepteur:

How do you force Visual Studio to regenerate the .designer files for aspx/ascx files?

Questions connexes