gpt4 book ai didi

c# - 在 ServerControl 标签中添加子控件?

转载 作者:行者123 更新时间:2023-11-30 19:13:18 25 4
gpt4 key购买 nike

我正在制作导航菜单。
我在 ServerControl 下面创建了它并且它可以工作,但我想允许用户在我的 ServerControl 标签中添加一些标准的 ASP.NET 控件,例如 label , image等等。

<MdsMenu:ServerControlMenu ID="ServerControlMenu1" runat="server">
<MdsMenu:animation AnimationSpeed="Normal" AnimationType="Opacity_Height" Delay="1000" DropShadow="true" />
<!-- HERE HAS TO HAVE SOME STANDARD ASP.NET CONTROLS -->
<!-- e.g <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> -->
</MdsMenu:MenuItem>
</MdsMenu:ServerControlMenu>

我的问题是如何在 <MdsMenu:MenuItem> 中获取子控件并像输出中那样显示它们。

附言:
我覆盖 RenderContents方法

protected override void RenderContents(HtmlTextWriter output)
{
output.Write(OutPutStringBuilder.ToString());
}

最佳答案

我想你只需要抛出 [ParseChildren(false), PersistChildren(true)]在代表 <MdsMenu:MenuItem/> 的类上标签。写在标签内的子控件应该在运行时在控件的 Controls 中可用。属性(property)。

更新:我拼凑了一个快速测试项目来证明这确实有效。 (显然,人们喜欢在不实际评估答案是否正确的情况下投反对票。)

此自定义控件具有您所期望的行为:

[ParseChildren(false), PersistChildren(true)]
public partial class SuperDiv : System.Web.UI.UserControl
{
public override void RenderControl(HtmlTextWriter writer)
{
writer.Write("<div class=\"super\">");
writer.Write(Controls.Count);

foreach (Control i in Controls)
i.RenderControl(writer);

writer.Write("</div>");
}
}

所以下面的 ASP.NET 标记:

<test:SuperDiv runat="server">
<asp:Label runat="server">Hello, World!</asp:Label>
</test:SuperDiv>

将导致呈现以下 HTML:

<div class="super">3
<span>Hello, World!</span>
</div>

(3 因为仅包含空格的两个文本节点也是控件的子节点,也是标签。)

关于c# - 在 ServerControl 标签中添加子控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4145619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com