Moh*_*yan 2 c# asp.net servercontrols menu
我正在开发导航菜单.
我在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>
Run Code Online (Sandbox Code Playgroud)
我的问题在于我如何获得Child Controls <MdsMenu:MenuItem>并将它们显示为输出中的.
PS:
我覆盖了RenderContents方法
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(OutPutStringBuilder.ToString());
}
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie 10
我想你只需要抛出[ParseChildren(false), PersistChildren(true)]代表<MdsMenu:MenuItem/>标签的类.然后,在控件的Controls属性中,运行时可以使用在标记内写入的子控件.
更新:我汇总了一个快速测试项目,以证明这确实有效.(显然人们喜欢在没有实际评估答案是否正确的情况下进行投票.)
此自定义控件具有您期望的行为:
[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>");
}
}
Run Code Online (Sandbox Code Playgroud)
所以下面的ASP.NET标记:
<test:SuperDiv runat="server">
<asp:Label runat="server">Hello, World!</asp:Label>
</test:SuperDiv>
Run Code Online (Sandbox Code Playgroud)
将导致呈现以下HTML:
<div class="super">3
<span>Hello, World!</span>
</div>
Run Code Online (Sandbox Code Playgroud)
(3因为只包含空格的两个文本节点也是控件的子节点,以及标签.)
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |