2010-01-22 4 views
1

Est-il possible de créer un UserControl qui prend à la fois ListItems et ContentTemplate? Quelque chose comme ceci:UserControl Combiné 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> 

Répondre

1

Cet exemple vous montre comment configurer un contrôle personnalisé pour avoir plusieurs enfants comme vous le désirez: http://www.codeproject.com/KB/webforms/MikEllASPNetQuery.aspx. J'ai posté un exemple de contrôle personnalisé, parce que je suis assez sûr que vous ne pouvez pas avec un contrôle utilisateur. Le contenttemplate peut être une propriété ITemplate avec un getter/setter, tandis que l'autre vous pourriez peut-être tirer parti de la classe ListItemCollection. Définissez chaque propriété comme définie dans l'article (c'est un exemple avec plusieurs références d'objets internes).

HTH.

+0

lien Great - merci! – cschear

2

Je les ai combiné comme tant et il semble fonctionner correctement:

[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; } 
     } 

    } 

occasion:

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