2012-06-29 46 views
1

是否可以在母版頁的多個位置使用ContentPlaceHolder的內容?是否可以多次重複一個佔位符的內容?

例如,我經常想這樣做:

<html> 
<head> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link rel="Stylesheet" href="../../Content/Corporate.css" /> 
</head> 
<body> 
    <div id="header"> 
    <h1>I'd like to reuse the TitleContent ContentPlaceHolder content here?</h1> 
    </div> 
    <div id="content"> 
    <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
    </div> 
    <div id="footer"> 
    &copy; 2012 Acme corp. 
    </div> 
</body> 
</html> 
+0

只要確保你不使用多餘的HTML。 http://stackoverflow.com/questions/760334/contentplaceholders-repeated-content –

+0

@AlexW我不知道我明白你的意思*多餘的HTML *? –

回答

1

答案是here,所以請獎勵作者,而是將其調整到MVC,這裏是你需要做什麼:

第一:定義自己的母版頁類(的Site.Master):

<%@ Master Language="C#" Inherits="MyProject.Views.Shared.MyMasterPage" %> 

二:類內容:

public class MyMasterPage : ViewMasterPage 
{ 
    protected override void RenderChildren(HtmlTextWriter writer) 
    { 
     var mainPlaceHolder = FindControl("TitleContent"); 
     var doublePlaceHolder = FindControl("TitleContentDuplicated"); 

     var sb = new StringBuilder(); 

     using (var sw = new StringWriter(sb)) 
     using (var tw = new HtmlTextWriter(sw)) 
     { 
      mainPlaceHolder.RenderControl(tw); 
     } 

     var lc = new LiteralControl(sb.ToString()); 
     doublePlaceHolder.Controls.Add(lc); 

     base.RenderChildren(writer); 
    } 
} 

:然後你就可以使用:

<title> 
    <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> 
    <asp:ContentPlaceHolder ID="TitleContentDuplicated" runat="server" /> 
</title> 
相關問題