1

是否可以构建一个同时使用 ListItems 和 ContentTemplate 的 UserControl?像这样的东西:

<Custom:UserControl ID="ucTest" runat="server">
  <Items>
    <asp:ListItem Text="Test1" Value="1" />
    <asp:ListItem Text="Test2" Value="2" />
  </Items>
  <ContentTemplate>
    Here is some content!<br/>
    <asp:Button ID="btnTest" runat="server" OnClick="SomeFunc" />
   </ContentTemplate>
</Custom:UserControl>
4

2 回答 2

2

我像这样组合它们,它似乎工作正常:

   [ParseChildren(true), PersistChildren(false)]
    public class Test : WebControl, INamingContainer
    {
        [ParseChildren(true, "Items")]
        public class iTestItems
        {
            private ListItemCollection _Items;

            [DefaultValue((string)null), MergableProperty(false), PersistenceMode(PersistenceMode.InnerDefaultProperty)]
            public virtual ListItemCollection Items
            {
                get
                {
                    if (_Items == null)
                        _Items = new ListItemCollection();

                    return _Items;
                }
            }
        }

        private iTestItems _TestItems = null;
        private ITemplate _ContentTemplate = null;
        public event EventHandler TestClick = null;

        [PersistenceMode(PersistenceMode.InnerProperty),
         TemplateContainer(typeof(iTestItems)),
         TemplateInstance(TemplateInstance.Single)]
        public iTestItems TestItems
        {
            get { return _TestItems; }
            set { _TestItems = value; }
        }

        [PersistenceMode(PersistenceMode.InnerProperty),
         TemplateContainer(typeof(TemplateControl)),
         TemplateInstance(TemplateInstance.Single)]
        public ITemplate ContentTemplate
        {
            get { return _ContentTemplate; }
            set { _ContentTemplate = value; }
        }

    }

用过的:

<cc:Test ID="jqTestTest01" runat="server" OnTestClick="jqTestTest01_TestClick">
    <TestItems>
        <asp:ListItem Text="Tab One" Value="1" Selected="True" />
        <asp:ListItem Text="Tab Two" Value="2" />
        <asp:ListItem Text="Tab Three" Value="3" />
        <asp:ListItem Text="Tab Four" Value="4" />
        <asp:ListItem Text="Tab Five" Value="5" />
    </TestItems>
    <ContentTemplate>
        <asp:Label ID="lblTestTest01" runat="server" Text="None" />            
    </ContentTemplate>    
</cc:Test>
于 2010-01-26T21:45:23.343 回答
1

此示例向您展示如何设置自定义控件以拥有多个您想要的孩子:http: //www.codeproject.com/KB/webforms/MikEllASPNetQuery.aspx。我发布了一个自定义控件示例,因为我很确定您不能使用用户控件。

内容模板可以是带有 getter/setter 的 ITemplate 属性,而另一个您可以利用 ListItemCollection 类。定义文章中定义的每个属性(这是一个具有多个内部对象引用的示例)。

HTH。

于 2010-01-22T22:57:31.650 回答