使用嵌套项构建复合控件

时间:2009-02-24 19:20:24

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

我的目标是创建一个复合控件,其外观类似于行为,并且行为类似于RadioButtonList。在幕后做了一些额外的事情,没有问题。我无法完成的是使用该控件所需的标记。我理想的标记看起来像这样:

<cc1:RadioButtonField ID="rfCardType" runat="server" Title="Card Type:">
    <asp:ListItem Enabled="true" Text="MasterCard" />
    <asp:ListItem Enabled="true" Text="Visa" />
    <asp:ListItem Enabled="true" Text="Amex" />
</cc1:RadioButtonField>

我想做的是通过<asp:ListItems&gt;到复合控件中的RadioButtonList,并处理生成/运行控件所需的所有内容。

RadioButtonField的

控制标记

<div class="Title"> 
    <asp:Label ID="lblTitle" runat="server" AssociatedControlID="rblField" />
</div>
<div class="Text">
    <asp:RadioButtonList ID="rblField" runat="server" Visible="true">
    </asp:RadioButtonList>
</div>
RadioButtonField的

代码背后

???

为了收集<asp:ListItems&gt;,RadioButtonField代码需要做些什么?并将它们传递给RadioButtonList?

1 个答案:

答案 0 :(得分:2)

如果您想要<ListItem>样式标记,请执行以下操作:

  1. items类型ListItemCollection的私有字段添加到复合控件
  2. Items类型为ListItemCollection的公共属性添加到复合控件中。 getter应该引用items私有字段。
  3. ParseChildren class属性添加到复合控件,以便它读取列表。
  4. 您的复合控件现在能够从其标记中读取ListItem个节点。控件呈现时,所有<ListItem>个节点都将添加到私有items集合中。

    如果您现在可以设置RadioButtonList的Items成员,那将是非常棒的,但不幸的是它是私有的。您必须foreach通过items字段并在您的孩子RadioButtonList上调用Add()方法。