防止其他服务器控件作为自定义ASP.NET控件的子控件

防止其他服务器控件作为自定义ASP.NET控件的子控件,asp.net,webforms,custom-server-controls,Asp.net,Webforms,Custom Server Controls,除了创建自定义的ControlBuilder类之外,是否有其他方法可以防止服务器控件作为子控件添加到自定义ASP.NET控件中 例如,假设我正在构建自己的面板控件: <my:SpecialPanel ID="SpecialPanel1" runat="server"> <!-- Allow valid HTML --> <input id="tbEmailAddress" type="text" /> </my:SpecialPanel&

除了创建自定义的
ControlBuilder
类之外,是否有其他方法可以防止服务器控件作为子控件添加到自定义ASP.NET控件中

例如,假设我正在构建自己的
面板
控件:

<my:SpecialPanel ID="SpecialPanel1" runat="server">
    <!-- Allow valid HTML -->
    <input id="tbEmailAddress" type="text" />
</my:SpecialPanel>
有什么建议吗?

您可以覆盖该方法:

相关资源:

您可以覆盖该方法:

相关资源:


回答得很好。比构建自定义控件生成器简单得多!回答得很好。比构建自定义控件生成器简单得多!
<my:SpecialPanel ID="SpecialPanel1" runat="server">
    <!-- WRONG - Throw an Exception -->
    <asp:TextBox ID="tbEmailAddress" runat="server" />
</my:SpecialPanel>
public class SpecialPanel : Control
{
   protected override void AddParsedSubObject(Object obj) 
   {
      if (obj is Control) 
      {
         throw new InvalidOperationException(
             "The 'SpecialPanel' control cannot contain server controls");
      }
   }
}