1

我的目标是创建一个看起来、行为和行为都像 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> 传递给复合控件中的 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> 并将它们传递给 RadioButtonList,后面的 RadioButtonField 代码需要做什么?

4

2 回答 2

2

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

  1. items将类型的私有字段添加ListItemCollection到复合控件
  2. Items将类型的公共属性添加ListItemCollection到复合控件。getter 应该引用items私有字段。
  3. ParseChildren类属性添加到您的复合控件,以便它可以读取列表。

您的复合控件现在可以ListItem从其标记中读取节点。当控件呈现时,所有<ListItem>节点都将被添加到私有items集合中。

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

于 2009-02-24T20:18:17.240 回答
1
[PersistenceMode(PersistenceMode.innerProperty)]
[DesignerSerializationVisibility(DesignerSerilizationVisibility.Content)]
ListCollection Items
{
}

也许试试这两个属性。唯一为您的PersistChildrenAttributeVisual Studio 控件提供设计器支持。DesignerSerializationVisibility.Content序列化集合数据类型的内容

于 2011-11-28T15:01:45.560 回答