场景
我有一个使用 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/