2009-12-12 4 views
1

J'ai quelques contrôles dans ma page principale, et je veux les acces de ses connexes C# clas ..référence d'objet nul dans les pages maître

Par exemple j'ai:

<asp:DropDownList ID="ddlSearch" runat="server" 
       onselectedindexchanged="ddlSearch_SelectedIndexChanged" 
       AutoPostBack="True"> 
      </asp:DropDownList> 

et je peux l'acces en écrivant le code, ainsi "il voit ses propriétés ok".

Mais lors de l'exécution i reçu

Object reference not set to an instance of an object.

u ne sais pourquoi?

J'ai aussi essayé de le trouver comme:

ContentPlaceHolder mpContentPlaceHolder = 
     (ContentPlaceHolder)this.FindControl("ContentHead"); 
    if (mpContentPlaceHolder != null) 
    { 
     DropDownList ddlSearch = 
      (DropDownList)mpContentPlaceHolder.FindControl("ddlSearch"); 
     if (!Page.IsPostBack) 
      utils.fillDDLSearch(ddlSearch); 
    } 

mais il donne aussi nul .... ce qui est vraiment étrange ...

J'ai essayé avec un autre objet (un contrôle d'image asp, mais exactement le même problème. Tout ce qu'il est correct à la compilation du temps, mais donne nulle à l'exécution correctement, il trouve QUOIQUE le titulaire de la place du contenu.

Quelqu'un sait-il le problème?

L'erreur:


Référence de l'objet fixe pas à une instance d'un objet. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. Détails d'exception: System.NullReferenceException: référence d'objet non définie sur une instance d'un objet.


+2

Pouvez-vous publier le code qui lève l'exception de référence NULL? –

Répondre

0

Ce que vous devez faire est de taper fortement l'association entre vos pages et votre page maître. Dans la page ascx, ajoutez cette ligne au début:
<% @ MasterType VirtualPath = "~/MasterPage.master"%>
où ~/MasterPage.master est une référence à votre page maître actuelle.

Puis dans votre page vous pourrez accéder à n'importe quel contrôle, propriétés, etc en utilisant:
Maître. [PropertyNameHere] moins les le '[]'.

Voir this pour plus de détails.

+0

Salut, Probablement vous avez manqué ceci à partir de mon poste: "je veux les accéder à partir de ses clas # connexes ..". Donc je ne suis pas sur l'autre page qui hérite du Master, mais sur la page derrière le Master: MasterPage.master.cs –

+0

Si vous voulez accéder à une liste déroulante qui se trouve sur la MasterPage dans le codebehind de la MasterPage, vous devriez pouvoir y accéder directement (utils.fillDDLSearch (ddlSearch);). Vous ne devriez pas avoir besoin de FindControl sur la page. Pourquoi cherchez-vous dans un ContentPlaceHolder? Le DropDownList est-il réellement dans le ContentPlaceHolder? – cfbarbero

+0

Exactement .... Je suis d'accord avec cela, donc j'ai essayé de l'accèder directement en premier ... Tout allait bien à la compilation, mais pas à l'exécution ... J'ai essayé avec d'autres objets aussi, à partir de la page principale, et le même comportement ... C'est pourquoi j'ai essayé de le trouver avec le titulaire du lieu de contenu. (donne null aussi ...) –

0

J'ai décidé de mettre ces composants dans un contrôle utilisateur et d'y gérer le comportement. Et mettre le contrôle de l'utilisateur dans la page maître.

Cependant, le problème reste flou: - pourquoi un contrôle dans la page maître ne peut pas être accédé à partir du masterpage.cs directement ...?

Questions connexes