asp.net - 内容占位符 : Repeated Content

标签 asp.net master-pages contentplaceholder

场景

我有一个使用 asp.net 母版页的应用程序,我想在其中重复页面顶部和底部的一些内容。目前我使用这样的东西:

母版页
<html>
  <body>
    <asp:ContentPlaceHolder ID="Foo" runat="server">
    </asp:ContentPlaceHolder>
    <!-- page content -->
    <asp:ContentPlaceHolder ID="Bar" runat="server">
    </asp:ContentPlaceHolder>
  </body>
</html>
内容页
<asp:Content ID="Top" ContentPlaceHolderID="Foo" runat="server">
  <!-- content -->
</asp:Content>
<asp:Content ID="Bottom" ContentPlaceHolderID="Bar" runat="server">
  <!-- content repeated -->
</asp:Content>

维护

如您所知,在代码中重复某些内容通常不好。它会产生维护问题。以下是我想做的,但由于重复的 id 属性,显然不会工作:

母版页
<html>
  <body>
    <asp:ContentPlaceHolder ID="Foo" runat="server">
    </asp:ContentPlaceHolder>
    <!-- page content -->
    <asp:ContentPlaceHolder ID="Foo" runat="server">
    </asp:ContentPlaceHolder>
  </body>
</html>
内容页
<asp:Content ID="Top" ContentPlaceHolderID="Foo" runat="server">
  <!-- content (no repetition) -->
</asp:Content>

可能吗?

有没有办法使用 asp.net webforms 来做到这一点?解决方案不一定要与上述内容类似,只需以相同的方式工作即可。

注释

我在 Visual Studio 2008 中使用 asp.net 3.0

最佳答案

嘿,如果有人仍然需要解决方案,这就是我所做的: 将其放入母版页的代码文件中

protected override void RenderChildren(HtmlTextWriter writer)
{
    Control mainPlaceHolder = FindControl("MainContentPlaceHolder");
    Control doublePlaceHolder = FindControl("ContentDoublePlaceHolder");

    StringBuilder sb = new StringBuilder();

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

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

    base.RenderChildren(writer);
}

我不确定这里的性能问题,但它确实有效。

关于asp.net - 内容占位符 : Repeated Content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760334/

相关文章:

c# - 如何在多个环境中使用 URL 路由?

c# - 让我登录以进行 Windows + 表单登录

asp.net - 如何限制文本框中允许的字符数?

asp.net - 从 ASP.net VB 中的子页面访问母版页属性

jquery - 简单的 jQuery 在 HTML 中工作,而不是在 ASP.NET 中工作

c# - MVC : C#: display content of a contentPlaceholder twice

asp.net - 获取 ContentPlaceHolder asp.net 中的控件

asp.net - 更改 ContentPlaceHolder 的 ID

Linux 网络服务器上的 ASP.NET

c# - 在嵌套母版页中查找控件