2010-01-22 19 views
1

是否有可能建立一个带有ListItems和ContentTemplate的UserControl?事情是这样的:UserControl Combined ListItems&ContentTemplate

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

回答

1

这个例子说明了如何建立一个自定义的控制有多个孩子喜欢你的愿望:http://www.codeproject.com/KB/webforms/MikEllASPNetQuery.aspx。我发布了一个自定义控件示例,因为我非常确定您无法使用用户控件。

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

HTH。

+0

莫大的联系 - 谢谢! – cschear 2010-01-23 00:07:10

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>