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

时间:2008-10-22 09:14:42

标签: 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>

输出:

<div id="Sample1">
   <span id=Label1>Hi</span>
   etc.....
</div>

守则在哪里:

public class SampleControl: WebControl
{
    .....Render Stuff Goes Here.....
}  

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

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

分析器错误 说明:解析为此请求提供服务所需的资源时发生错误。请查看以下特定的解析错误详细信息并适当修改源文件。

任何想法?

1 个答案:

答案 0 :(得分:6)

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

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