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

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>

如果可能的话,我更倾向于更简洁的语法。

注意:欢迎提出更好的标题或描述。即使您没有编辑权限,为了社区的利益,我也很乐意编辑条目。


我建议将标题更改为“如何使用默认集合属性构建ASP.NET自定义控件?”,因为有一些关于使用声明性集合属性构建控件的解释,但很少有人解释如何使其成为默认属性。 - Chris Pietschmann
1个回答

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接