Создание составного элемента управления с вложенными элементами - PullRequest
1 голос
/ 24 февраля 2009

Моя цель - создать составной элемент управления, который будет выглядеть, вести себя как и вести себя как 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:

???

Что нужно сделать с помощью кода RadioButtonField, чтобы собрать <asp:ListItems> и передать их в RadioButtonList?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2009

Если вы хотите разметку стиля <ListItem>, вот что вам нужно сделать:

  1. Добавьте items личное поле типа ListItemCollection к вашему составному элементу управления
  2. Добавьте Items открытое свойство типа ListItemCollection к вашему составному элементу управления. Получатель должен ссылаться на приватное поле items.
  3. Добавьте атрибут класса ParseChildren в ваш составной элемент управления, чтобы он прочитал список.

Ваш составной элемент управления теперь может читать ListItem узлов из его разметки. Когда элемент управления рендерится, все узлы <ListItem> будут добавлены в частную коллекцию items.

Было бы замечательно, если бы вы могли просто установить Items элемент RadioButtonList, но, к сожалению, он является приватным. Вам нужно будет foreach через поле items и вызвать метод Add() в вашем дочернем RadioButtonList.

1 голос
/ 28 ноября 2011
[PersistenceMode(PersistenceMode.innerProperty)]
[DesignerSerializationVisibility(DesignerSerilizationVisibility.Content)]
ListCollection Items
{
}

Может быть, попробовать это два атрибута. PersistChildrenAttribute обеспечивает только дизайнерскую поддержку для вашего элемента управления с помощью Visual Studio. DesignerSerializationVisibility.Content сериализует содержимое типа сбора данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...