首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否在ServerControl标记内添加子控件?

是否在ServerControl标记内添加子控件?
EN

Stack Overflow用户
提问于 2010-11-10 22:43:10
回答 2查看 2.2K关注 0票数 2

我正在做一个导航菜单。

我已经创建了下面的ServerControl,它可以工作,但我希望允许用户在我的ServerControl标记中添加一些标准的ASP.NET控件,如labelimage等。

代码语言:javascript
复制
<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方法

代码语言:javascript
复制
protected override void RenderContents(HtmlTextWriter output)
{ 
   output.Write(OutPutStringBuilder.ToString()); 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-15 12:05:04

我认为您只能在表示<MdsMenu:MenuItem/>标记的类上抛出[ParseChildren(false), PersistChildren(true)]。然后,在标记内编写的子控件应该在运行时在控件的Controls属性中可用。

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

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

代码语言:javascript
复制
[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标记:

代码语言:javascript
复制
<test:SuperDiv runat="server">
    <asp:Label runat="server">Hello, World!</asp:Label>
</test:SuperDiv>

将导致呈现以下HTML:

代码语言:javascript
复制
<div class="super">3
    <span>Hello, World!</span>
</div>

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

票数 10
EN

Stack Overflow用户

发布于 2010-11-16 19:24:30

你需要让你的web控件充当一个容器(就像面板控件)

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

代码语言:javascript
复制
 [ParseChildren(false)]
    [PersistChildren(true)]
    [Designer(typeof(PanelDesigner))] 
    public class MyOwnControl:WebControl
    {




    }

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

代码语言:javascript
复制
 <cc1:MyOwnControl ID="MyOwnControl1" runat="server">
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </cc1:MyOwnControl>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4145619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档