如何让子项出现在ASP.NET的自定义webcontrol中?

dan*_*ine 2 asp.net web-control

例如,我有一个名为SampleControl的自定义控件.为了简化这个问题的事情,假装我只是从头开始制作一个Panel Control克隆.

<CC:SampleControl ID="Sample1" runat="server">
   <asp:Label ID="Label1" runat="server" Text="Hi"></asp:Label>
   <asp:Button ID="Button1" runat="server" Text="Button1"></asp:Label>
</CC:SampleControl>
Run Code Online (Sandbox Code Playgroud)

要输出:

<div id="Sample1">
   <span id=Label1>Hi</span>
   etc.....
</div>
Run Code Online (Sandbox Code Playgroud)

守则在哪里:

public class SampleControl: WebControl
{
    .....Render Stuff Goes Here.....
}  
Run Code Online (Sandbox Code Playgroud)

中间的ASP控件没有被ASP.NET注册.当我在Panel控件上做了一个Reflector时,我无法找到他们如何获得渲染的中间控件.它看起来不像是使用模板化控件.

当我这样做时,我收到此错误:

分析程序错误说明:解析为此请求提供服务所需的资源时发生错误.请查看以下特定的解析错误详细信息并相应地修改源文件.

有任何想法吗?

Ale*_*kov 6

首先,[ParseChildren(false)]属性让解析器知道您希望控件将嵌套内容视为子控件.

然后确保调用Render RenderChildren方法中的某个地方.它是System.Web.UI.Control.Render()的默认实现,因此您可以在覆盖Render方法中执行base.Render(writer).