2010-04-09 76 views
0

我試圖在使用母版頁和內容Web窗體的我的asp.net站點中的body標籤上設置一個類。我只想通過將bodycssclass屬性(見下文)添加到內容Web窗體頁面指令來實現此目的。ASP.NET Content Web Form - 佔位符內容消失

它通過下面的解決方案工作,但是當我試圖查看Default.aspx時Content1控件丟失其內容。 任何想法爲什麼?


下面是我如何做到這一點。我有以下內容的母版頁:

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

它後面的代碼看起來像:

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

它繼承:

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

我Default.aspx的定義爲:

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

後面的代碼這個文件看起來像:

public partial class Default : PageBase { ... } 

,它繼承自:

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

我已經收窄的問題降到'MasterPageBase mpbCurrent =此。作爲MasterPageBase的主人;',如果我評論和下面的內容仍然保留。似乎在那時引用母版頁是不正確的。 – 2010-04-09 11:29:39

回答

1

現在,這對我的作品......

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

非常感謝。敲了一個小時後,我找到了答案。不知道爲什麼它像這樣工作... – Alex 2011-05-25 19:35:58