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

Lar*_*nal 12 asp.net custom-server-controls

我正在寻找类似的事情

<cstm:MyControl runat="server">
    <myItem attr="something" />
    <myItem attr="something" />
</cstm:MyControl>
Run Code Online (Sandbox Code Playgroud)

什么是裸骨代码需要什么来解决这个问题?

里克的例子显示了类似的东西

<cstm:MyControl runat="server">
    <myItems>
        <cstm:myItem attr="something" />
        <cstm:myItem attr="something" />
    </myItems>
</cstm:MyControl>
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我更喜欢更简洁的语法.

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

Chr*_*ann 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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且,这是一个示例用法:

<%@ 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>
Run Code Online (Sandbox Code Playgroud)