Как создать пользовательский элемент управления ASP.NET со свойством коллекции? - PullRequest
12 голосов
/ 24 сентября 2008

Я ищу что-то похожее на

<cstm:MyControl runat="server">
    <myItem attr="something" />
    <myItem attr="something" />
</cstm:MyControl>

Какой код необходим для этого?

Пример Рика показывает что-то похожее на

<cstm:MyControl runat="server">
    <myItems>
        <cstm:myItem attr="something" />
        <cstm:myItem attr="something" />
    </myItems>
</cstm:MyControl>

Я бы предпочел более краткий синтаксис, если это возможно.

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

1 Ответ

17 голосов
/ 24 сентября 2008

Вот действительно простой пример элемента управления, который делает именно то, что вы ищете:

namespace TestControl
{
    [ParseChildren(true, DefaultProperty = "Names")]
    public class MyControl : Control
    {
        public MyControl()
        {
            this.Names = new List<PersonName>();
        }

        [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
        public List<PersonName> Names { get; set; }
    }

    public class PersonName
    {
        public string Name { get; set; }
    }
}

А, вот пример использования:

<%@ Register Namespace="TestControl" TagPrefix="TestControl"  %>

<TestControl:MyControl runat="server" ID="MyControl1">
    <TestControl:PersonName Name="Chris"></TestControl:PersonName>
    <TestControl:PersonName Name="John"></TestControl:PersonName>
</TestControl:MyControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...