在ServerControl标记中添加子控件?

时间:2010-11-10 14:43:10

标签: c# asp.net menu servercontrols

我正在开发导航菜单 我在ServerControl下面创建了它,但是我希望允许用户在我的ServerControl标签中添加一些标准的ASP.NET控件,如labelimage等等。

<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>内获得儿童控制,并将它们显示为输出中的颜色。

P.S: 我覆盖了RenderContents方法

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

2 个答案:

答案 0 :(得分: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>");
    }
}

以下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因为只包含空格的两个文本节点也是控件的子节点,以及标签。)

答案 1 :(得分:1)

您需要将Web控件充当容器(如面板控件)

只需将下面显示的属性添加到您的Web用户控件类

即可
 [ParseChildren(false)]
    [PersistChildren(true)]
    [Designer(typeof(PanelDesigner))] 
    public class MyOwnControl:WebControl
    {




    }

然后在.aspx页面上,您可以执行以下操作:

 <cc1:MyOwnControl ID="MyOwnControl1" runat="server">
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </cc1:MyOwnControl>