2009-06-25 6 views
0

J'ai déjà posé ce problème aussi here. Je suis à nouveau confronté au même type de problème. J'ai un contrôle utilisateur qui affiche des informations provenant d'un objet métier. Je l'utilise déjà sur deux pages. Dans les deux pages, j'appelle une méthode avec un objet métier pour lier des contrôles (principalement des étiquettes d'ASP) sur le contrôle de l'utilisateur aux propriétés de l'objet. J'appelle cette méthode dans la méthode LoadComplete de la page ASPX.UserControl travaillant dans une page mais pas dans d'autres

protected void Page_LoadComplete(object sender, EventArgs e) 
    { 
     control.LoadData(bussinessObject); 
    } 

Cela fonctionne bien sur les deux pages. Maintenant, j'ai la troisième page où j'utilise le même contrôle. Maintenant, quand je l'appelle LoadData dans cette nouvelle page J'obtiens NullReference exception:

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the 
    current web request. Please review the stack trace for more information 
    about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set 
    to an instance of an object. 

Source Error: 

Line 91:    lblOrgName.Text = obj.Name; 

EDIT: lblOrgName est NULL :(S'il vous plaît aidez-moi

EDIT 2: Je par étagé le code Après le chargement de la page contenant la page, le chargement de PageWload est appelé, puis le chargement de la page du contrôle du problème est interrompu Arrêt de la fermeture de fermeture de cette fonction J'ai chargé lblOrgName dans Immediate Window et affiche null :(

Ensuite, dans LoadComplete de la page contenant le contrôle de l'utilisateur, j'ai arrêté et tapé le nom du contrôle dans la fenêtre immédiate. Il montre toutes les étiquettes et autres contrôles dedans comme nul.

EDIT 3:

J'ai mis constructeur protégé dans le UserControl comme suggéré par Stendhal dans les réponses:

protected OrgInfo(){ } 

Maintenant que je reçois cette erreur:

Compiler Error Message: CS0122: 'Controls.OrgInfo.OrgInfo()' is inaccessible 
      due to its protection level. 

La page aspx dans le répertoire racine du projet et le contrôle OrgInfo se trouve dans le dossier Controls.

EDIT 4:

J'ai essayé de créer tous les contrôles (principalement étiquettes) dans la méthode de chargement de la page, mais hélas le nombre de collection Controls est 0 (zéro)!

+0

est-ce que obj est nul ou lblOrgName? – shahkalpesh

Répondre

2

je mets en ligne suivante page:

<%@ Register src="~/Controls/OrgInfo.ascx" TagName="OrgInfo" TagPrefix="proj1"/> 

et ça marche!

0

Il semble que le contrôle "lblOrgName" tente d'affecter une valeur, mais qu'il n'ait pas encore été construit/résolu dans la page aspx.

Assurez-vous que dans la directive @page de la page ASPX problématique que vous avez l'ensemble suivant:

AutoEventWireup="true" 
+0

oui c'est. Page Language = "C#" AutoEventWireup = "true" – TheVillageIdiot

2

Comment mettre votre usercontrol sur la page? Cela m'est arrivé dans le passé et la raison en était que le contrôle a été ajouté accidentellement comme un contrôle serveur et non un contrôle utilisateur. Tous les sous-contrôles dans le contrôle n'ont jamais été institués.

Vous pouvez vérifier cela en mettant un constructeur par défaut protégé dans le code-behind pour le contrôle de l'utilisateur:

protégé MyUserControl() {}

De cette façon, le contrôle ne peut pas être instancié comme un contrôle serveur.

+0

J'ai modifié la question. S'il vous plaît toute autre suggestion? Je le mets comme ça TheVillageIdiot

+0

Avez-vous des mappages dans web.config (configuration/system.web/pages/controls /)? –

+0

Oui, j'ai mis la ligne dans partie: TheVillageIdiot

Questions connexes