我是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>
在这种情况下,我不希望复选框在那里。如何阻止这种情况发生?
答案 0 :(得分:2)
我没有尝试过你所追求的东西,但根据我所做的其他事情,我会尝试这样做:
如果你这样做,那么你的标记最终会看起来像这样:
<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等)的任何原因。 )
作为最后的手段,我确信你可以劫持渲染方法并只在预先确定的类集中渲染控件,但这似乎是最好的。