19
décembre
2008
				
				[ASP.NET][C#] Lorsque j’utilise une MasterPage, mon contôle placé dans un ContentPlaceHolder vaut null dans l’événement OnPreInit
				
					
					décembre
2008
En voilà un titre long ![]()
Il faut dire qu’il s’agit d’un problème qui arrive dans le cas suivant :
On dispose d’une masterpage, ex (un peu épuré) :
<%@ Master Language="C#" AutoEventWireup="false" CodeBehind="Site1.master.cs" Inherits="testMasterPage.Site1" %> 
 
<html><head runat="server"><title></title></head>
<body>
<form id="form1" runat="server">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</form>
</body>
</html>
<html><head runat="server"><title></title></head>
<body>
<form id="form1" runat="server">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</form>
</body>
</html>
Lorsque l’on crée une page qui utilise cette masterpage et qui remplit le ContentPlaceHolder, ex :
<%@ Page Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="false" CodeBehind="Default.aspx.cs" Inherits="testMasterPage._Default" %> 
 
<asp:Content runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<asp:Label ID="leLabel" runat="server" />
</asp:Content>
<asp:Content runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<asp:Label ID="leLabel" runat="server" />
</asp:Content>
Si j’essaie d’accéder à mon label dans le OnPreInit de la page, ex :
protected override void OnPreInit(EventArgs e) 
{
leLabel.Text = "Mon Label"; // leLabel = null !!
base.OnPreInit(e);
}
{
leLabel.Text = "Mon Label"; // leLabel = null !!
base.OnPreInit(e);
}
J’aurai une exception parce que mon label vaut null. Argh ! Problème !
La raison à ce comportement, c’est que dans le PreInit, la masterpage n’est pas encore initialisée.
Pour que mon label ne soit pas null, il faut que je force l’initialisation de ma MasterPage, et accédant à l’objet Master.
On pourra faire ainsi :
protected override void OnPreInit(EventArgs e) 
{
MasterPage masterPage = Master;
leLabel.Text = "Mon Label";
base.OnPreInit(e);
}
{
MasterPage masterPage = Master;
leLabel.Text = "Mon Label";
base.OnPreInit(e);
}
Désormais, leLabel ne sera plus null et nous serons heureux ![]()
Commentaires récents
- dans [Tests] Arrange Act Assert, une traduction ?
 - dans [UnitTest][C#] Tester une méthode privée
 - dans Récupérer une valeur d’un contrôle depuis une autre Form / inclusions croisées et déclaration anticipée
 - dans Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight
 - dans Tutoriel : Utiliser la ListBox et l’Isolated Storage dans vos applications Windows Phone 7 avec Silverlight
 
Archives
- janvier 2013
 - avril 2012
 - janvier 2012
 - juin 2011
 - janvier 2011
 - décembre 2010
 - novembre 2010
 - septembre 2010
 - juin 2010
 - mars 2010
 - février 2010
 - janvier 2010
 - décembre 2009
 - novembre 2009
 - octobre 2009
 - septembre 2009
 - août 2009
 - juillet 2009
 - mai 2009
 - avril 2009
 - mars 2009
 - janvier 2009
 - décembre 2008
 - novembre 2008
 - octobre 2008
 - septembre 2008
 - août 2008
 - juillet 2008
 - juin 2008
 - mai 2008
 - avril 2008
 - mars 2008
 - février 2008
 - janvier 2008
 - décembre 2007
 - novembre 2007
 - octobre 2007
 - septembre 2007
 - août 2007
 - juillet 2007
 - juin 2007
 - mai 2007
 

 Un article de nico-pyright(c)