2009-02-24 51 views
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>的單選按鈕列表中的複合控制,並且具有處理生產/運行控制所需的一切。

控制標記爲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:

??? 

是什麼背後需要以做RadioButtonField代碼收集<asp:ListItems>和通他們到RadioButtonList?

回答

2

如果你想<ListItem>風格的標記,這裏是你必須做的:

  1. ListItemCollection類型的items私有字段添加到您的複合控件
  2. 添加ListItemCollection類型的Items公共財產到你的複合控制。獲取者應該參考items私人領域。
  3. ParseChildren類屬性添加到您的複合控件中,以便它讀取列表。

您的複合控件現在可以從其標記中讀取ListItem節點。當控件呈現時,所有<ListItem>節點將被添加到專用items集合中。

如果您現在可以設置RadioButtonList的Items成員,但不幸的是它是私人的,那將是美好的。您必須通過items字段foreach並在子RadioButtonList上調用Add()方法。

+0

這樣做的竅門。現在我將如何實現顯示asp:ListItem作爲可用選項的intellisense? – 2009-02-24 20:29:18

1
[PersistenceMode(PersistenceMode.innerProperty)] 
[DesignerSerializationVisibility(DesignerSerilizationVisibility.Content)] 
ListCollection Items 
{ 
} 

也許試試這兩個屬性。 PersistChildrenAttribute僅爲使用Visual Studio進行控件提供設計器支持。 DesignerSerializationVisibility.Content序列化收集數據類型的內容