2010-04-09 4 views
0

Je tente de définir une classe sur l'étiquette body dans mon site asp.net qui utilise une page maître et des formulaires web de contenu. Je veux simplement être en mesure de le faire en ajoutant une propriété bodycssclass (voir ci-dessous) à la directive de page de formulaire web de contenu.ASP.NET Content Web Form - le contenu de l'espace réservé disparaît

Cela fonctionne à travers la solution ci-dessous mais lorsque j'essaie d'afficher Default.aspx, le contrôle Content1 perd son contenu. Des idées pourquoi?


Voici comment je le fais. J'ai une page principale avec le contenu suivant:

<%@ Master Language="C#" ... %> 
<html><head>...</head> 
<body id=ctlBody runat=server> 
<asp:ContentPlaceHolder ID="cphMain" runat="server" /> 
</body> 
</html> 

son code regarde derrière comme:

public partial class Site : MasterPageBase 
{ 
    public override string BodyCssClass 
    { 
     get { return ctlBody.Attributes["class"]; } 
     set { ctlBody.Attributes["class"] = value; } 
    } 
} 

hérite de:

public abstract class MasterPageBase : MasterPage 
{ 
    public abstract string BodyCssClass 
    { 
     get; 
     set; 
    } 
} 

mon default.aspx est défini comme:

<%@ Page Title="..." [master page definition etc..] bodycssclass="home" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="cphMain" runat="server"> 
    Some content 
</asp:Content> 

le code derrière pour ce fichier ressemble à:

public partial class Default : PageBase { ... } 

et il hérite de:

public class PageBase : Page 
{ 
    public string BodyCssClass 
    { 
     get 
     { 
      MasterPageBase mpbCurrent = this.Master as MasterPageBase; 
      return mpbCurrent.BodyCssClass; 
     } 
     set 
     { 
      MasterPageBase mpbCurrent = this.Master as MasterPageBase; 
      mpbCurrent.BodyCssClass = value; 
     } 
    } 
} 
+0

Je l'ai réduit le problème à 'MasterPageBase mpbCurrent = cela. Master comme MasterPageBase; ', si je commente cela et la ligne suivante sur le contenu reste. Il semble que le fait de référencer la page principale à ce moment-là est incorrect. –

Répondre

1

Cela fonctionne pour moi maintenant ...

public class PageBase : Page 
{ 
    public string BodyCssClass 
    { 
     get; 
     set; 
    } 

    protected override void OnPreInit(EventArgs e) 
    { 
     MasterPageBase mpbCurrent = this.Master as MasterPageBase; 
     mpbCurrent.BodyCssClass = BodyCssClass; 

     base.OnLoadComplete(e); 
    } 
} 
+0

Merci un million. Je me cognais la tête pendant une heure puis j'ai trouvé votre réponse. Je me demande pourquoi ça marche comme ça ... – Alex