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複合コントロールに追加します。ゲッターはitemsプライベートフィールドを参照する必要があります。
  3. ParseChildrenクラス属性を複合コントロールに 追加して、リストを読み取るようにします。

複合コントロールにListItem、マークアップからノードを読み取る機能が追加されました。コントロールがレンダリングされると、すべての<ListItem>ノードがプライベートitemsコレクションに追加されます。

RadioButtonListのメンバーを設定できれば素晴らしいのですがItems、残念ながらプライベートです。フィールドを調べforeachて、子のRadioButtonListitemsのメソッドを呼び出す必要があります。Add()

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

この 2 つの属性を試してみてください。はPersistChildrenAttribute、Visual Studio を使用したコントロールのデザイナー サポートのみを提供します。DesignerSerializationVisibility.Contentコレクションデータ型の内容をシリアライズします

于 2011-11-28T15:01:45.560 に答える