我的目标是创建一个复合控件,其外观类似于行为,并且行为类似于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,并处理生成/运行控件所需的所有内容。
控制标记:
<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?
答案 0 :(得分:2)
如果您想要<ListItem>
样式标记,请执行以下操作:
items
类型ListItemCollection
的私有字段添加到复合控件Items
类型为ListItemCollection
的公共属性添加到复合控件中。 getter应该引用items
私有字段。ParseChildren
class属性添加到复合控件,以便它读取列表。 您的复合控件现在能够从其标记中读取ListItem
个节点。控件呈现时,所有<ListItem>
个节点都将添加到私有items
集合中。
如果您现在可以设置RadioButtonList的Items
成员,那将是非常棒的,但不幸的是它是私有的。您必须foreach
通过items
字段并在您的孩子RadioButtonList上调用Add()
方法。