Как вы создаете настраиваемый элемент управления ASP.NET с свойством collection?


12

Я ищу, чтобы сделать что-то похожее на

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

Что голые кости код, необходимый, чтобы это осуществить?

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

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

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

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

  0

Я хотел бы предложить изменить название это «Как вы создаете пользовательский элемент управления ASP.NET со свойством коллекции по умолчанию?», так как есть несколько пояснений о создании элемента управления с объявляющим свойством коллекции, но мало кто объясняет, как сделать его свойством по умолчанию. 23 сен. 082008-09-23 21:10:07

17

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

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>