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>
4

1 に答える 1

1

Answer is hereですので、著者に報酬を与えてください。ただし、MVC に調整するには、次のことを行う必要があります。

最初:独自のマスター ページ クラス (Site.Master) を定義します。

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

2 番目:クラスの内容:

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);
    }
}

3番目:次に使用できます:

<title>
    <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
    <asp:ContentPlaceHolder ID="TitleContentDuplicated" runat="server" />
</title>
于 2012-06-30T00:08:35.007 に答える