【问题标题】:ASP.NET web control only allow specific contents?ASP.NET Web 控件只允许特定内容?
【发布时间】:2011-04-15 17:55:51
【问题描述】:

我是 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>

在这种情况下,我不希望复选框在那里。我怎样才能阻止这种情况发生?

【问题讨论】:

  • 你的问题没有意义。
  • @John:我的假设是他们正在编写一个自定义控件,并且不希望容器接受 X 类型的控件(在本例中为 X=CheckBox)
  • 也许你应该更有建设性。怎么没有意义?
  • 我稍微改述了这个问题。应该更详细。
  • 好的,如果您不希望复选框出现在此处,请不要将其放在那里。如果您说您不希望它在某些情况下出现,请解释这些是什么。隐藏复选框是否足够?还是要将其从控件集合中删除?你可以说 TabPanel1.Controls.Remove("idofcheckbox");对于您要删除它的条件。

标签: c# asp.net


【解决方案1】:

我还没有完全尝试过你所追求的,但根据我所做的其他事情,我会试试这个:

  • 在 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 是详细演示此技术的演练。

【讨论】:

  • 确实很有趣。不过,我最终还是按照自己的答案去做了。
【解决方案2】:

我想通了。

如果要添加的控件类型不是我想要的类型,则必须在我从 WebControl 覆盖的 AdditionalControl 过程下抛出异常。

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

太棒了!

【讨论】:

    【解决方案3】:

    我将在这里进行猜测,但基于一些quick googling,我认为您正在寻找ControlBuilder。该演示将他们的控制限制为一个名为“mycell”的对象,但我看不出有任何理由不能将其限制为您自己的对象或内置的 ASP.NET 控件(即面板而不是文本框等)。 )

    作为最后的手段,我相信你可以劫持渲染方法,只渲染预先确定的类集中的控件,但这似乎充其量是 hack-ish。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多