如何使用集合属性构建ASP.NET自定义控件?


12

我在找做

<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> 

一些类似于我宁愿更简洁的语法如果可能的话。

注意:随意建议一个更好的标题或描述。即使您没有编辑权限,我也很乐意为了社区而编辑条目。

  0

我建议改变这个标题是“如何使用默认集合属性构建ASP.NET自定义控件?”,因为有关于使用声明性集合属性构建控件的一些解释,但很少解释如何使其成为默认属性。 23 9月. 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>