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
Un article de nico-pyright(c)
Pas de commentaires
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
- [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 dans
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