ASP.NET Web控件只允许特定内容?

时间:2011-04-15 17:55:51

标签: c# asp.net

我是ASP .NET Web控件的新手,但不是一般的ASP .NET或C#。

我想知道如何将允许的内容类型限制为特定的类。

我制作了一个名为TabPanel的自定义Web控件,我希望它只能包含TabPages。

例如,以下标记应该是非法的,因为它包含一个复选框。

<cc1:TabPanel ID="TabPanel1" runat="server">
    <cc1:TabPage runat="server">
        this is a simple test
    </cc1:TabPage>
    <cc1:TabPage runat="server">
        this is another simple test
    </cc1:TabPage>
    <asp:CheckBox runat="server" />
</cc1:TabPanel>

在这种情况下,我不希望复选框在那里。如何阻止这种情况发生?

3 个答案:

答案 0 :(得分:2)

我没有尝试过你所追求的东西,但根据我所做的其他事情,我会尝试这样做:

  • 在TabPannel中创建一个属性,该属性是TabPages的集合(出于演示目的将其称为Tabs)。这可以是数组,列表或自定义集合类,关键是要键入只接受TabPages作为成员。
  • 为属性提供[PersistenceMode(PersistenceMode.InnerProperty)]属性。
  • 覆盖CreateChildControls以将集合的内容添加到控件中。

如果你这样做,那么你的标记最终会看起来像这样:

<cc1:TabPanel ID="TabPanel1" runat="server">
    <Tabs>
        <cc1:TabPage runat="server">this is a simple test</cc1:TabPage>
        <cc1:TabPage runat="server">this is another simple test</cc1:TabPage>
    </Tabs>
</cc1:TabPanel> 

并且它不应该允许任何不是TabPage的东西嵌套在Tabs属性中。

http://msdn.microsoft.com/en-us/library/9txe1d4x(v=VS.90).aspx详细介绍了这项技术。

答案 1 :(得分:1)

我明白了。

如果添加的控件类型不是我想要的类型,则必须在AddedControl过程中抛出一个异常,我从WebControl中重写。

现在设计师在控件本身上显示一条漂亮的红色错误信息,阻止我做这么愚蠢的事情。

真棒!

答案 2 :(得分:0)

我将在这里猜测,但基于一些quick googling,我认为你正在寻找ControlBuilder。该演示将其控制权限制为一个名为“mycell”的对象,但我没有看到为什么这不能局限于您自己的对象或内置ASP.NET控件(即Panels而不是TextBoxes等)的任何原因。 )

作为最后的手段,我确信你可以劫持渲染方法并只在预先确定的类集中渲染控件,但这似乎是最好的。