【问题标题】:Prevent other server controls as children of a custom ASP.NET control阻止其他服务器控件作为自定义 ASP.NET 控件的子项
【发布时间】:2011-04-22 06:25:11
【问题描述】:

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

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

<my:SpecialPanel ID="SpecialPanel1" runat="server">
    <!-- Allow valid HTML -->
    <input id="tbEmailAddress" type="text" />
</my:SpecialPanel>

我想阻止用户在SpecialPanel 中添加服务器端控件:

<my:SpecialPanel ID="SpecialPanel1" runat="server">
    <!-- WRONG - Throw an Exception -->
    <asp:TextBox ID="tbEmailAddress" runat="server" />
</my:SpecialPanel>

有什么建议吗?

【问题讨论】:

    标签: asp.net webforms custom-server-controls


    【解决方案1】:

    您可以覆盖Control.AddParsedSubObject 方法:

    public class SpecialPanel : Control
    {
       protected override void AddParsedSubObject(Object obj) 
       {
          if (obj is Control) 
          {
             throw new InvalidOperationException(
                 "The 'SpecialPanel' control cannot contain server controls");
          }
       }
    }
    

    相关资源:

    【讨论】:

    • 优秀的答案。比构建自定义控件生成器要简单得多!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多