2012-06-29 47 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> 
相关问题