Как дать настраиваемому элементу управления ASP.NET возможность разбирать разметку XML в коллекции? - PullRequest
1 голос
/ 01 апреля 2010

Я пишу пользовательский веб-элемент управления ASP.NET и хотел бы, чтобы в нем была коллекция пользовательских элементов, которые также можно указывать в разметке XML. Примерно так:

class MyControl: WebControl
{
    public IList<MyItemType> MyItems { get; private set; }
}

А в разметке:

<asd:MyControl runat="server" id="mc1">
    <MyItems>
        <MyDerivedCustomItem asd="dsa"/>
        <MyOtherDerivedCustomItem asd="dsa"/>
    </MyItems>
</asd:MyControl>

Как мне это сделать? Я думал, что все это связано с реализацией некоторого интерфейса в коллекции или добавлением некоторых специальных атрибутов в свойство, но, похоже, ничего из того, что я делаю, не работает.

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Ха, понял!

Кажется, что IList<T> - плохой тип для возврата. Это должно быть что-то, что реализует просто старый IList. Хотя реализация может быть явной. Предоставление переопределений метода с теми же именами, но строго типизированными аргументами ограничит доступные параметры в редакторе разметки.

Ну, конечно, добавление стандартных атрибутов также представляется необходимым:

[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[MergableProperty(false)]

Не уверен, что они все делают (документация во многих местах довольно неописательна), но это работает!

0 голосов
/ 01 апреля 2010

Возможно, эта статья на MSDN даст вам старт: http://msdn.microsoft.com/en-us/library/9txe1d4x.aspx

Один из важных атрибутов, на которые следует обратить внимание:
[PersistenceMode (PersistenceMode.InnerDefaultProperty)]
который даст желаемый эффект ...

НТН.

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