Мне нужно написать пользовательский элемент управления, который можно использовать со следующим синтаксисом:
<quiz:Question runat="server">
<Answer>Foo</Answer>
<Answer>Bar</Answer>
</quiz:Question>
Я пробовал следующее объявление свойства:
[ParseChildren(true, "Answer")]
public class Question : UserControl
{
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string[] Answer { get; set; }
}
Но затем редактор Visual Studio настаивает на том, чтобы <Ответы>
должен быть самозакрывающимся, и я получу это исключение, если решу иначе:
Литеральное содержимое ('Foo') не допускается в 'System.String []'.
Я изучал
в Reflector, который наследуется от ListControl
, который объявляет свойство Items
следующим образом:
ParseChildren(true, "Items")
public abstract class ListControl
{
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public virtual ListItemCollection Items { get; }
}
Это не совсем то, что я хочу, потому что в DropDownList
вы должны добавить
как дочерние элементы.И есть кое-что, чего я не понимаю в дизайне элементов управления, что в настоящее время мешает мне найти решение:
не требует runat = "server"
атрибут?