2009-10-01 8 views
0

Je cherchais tout au long de msdn, mais je ne sais pas ce que je devrais rechercher exactement ... comment accéder aux éléments enfants d'un contrôle utilisateur, je ne souhaite pas créer un nouveau contrôle personnalisé qui rende son propre HTML, la sortie html est un répéteur simple dans un fichier ascx, il ressemble à ceci:récupérer des éléments enfant de contrôle utilisateur par programme dans .net, comment?

<asp:repeater id="rpContent" runat="server" onitemdatabound="rpContent_itemdatabound"> 
    <headertemplate><ul class="displaypanel"></headertemplate> 
    <itemtemplate> 
     <li class="on"> 
      <a href="javascript://">tab header</a> 
      <div> 
       what goes here is tab content 
      </div> 
     </li> 
    </itemtemplate> 
    <footertemplate> 
     </ul></footertemplate> 
</asp:repeater> 

Je veux la mise en œuvre de ressembler à ceci:

<bni:tabs id="tabs" runat="server"> 
    <tab srcId="id1" /> 
    <tab srcId="id2" /> 
</bni:tabs> 

donc en gros dans le code derrière, je veux récupérer la collection d'enfants dans un tableau ou une liste, et faire un peu de travail avec les ID, puis lier le jeu de résultats à mon répéteur ...

Répondre

0

J'ai trouvé la solution, encore une fois, tout seul!

dans le code ascx derrière

[ParseChildren(true,"MyTabs")] 
public partial class QucikTabsControl : System.Web.UI.UserControl 
{ 

    private List<Tab> _myTabs; 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public List<Tab> MyTabs 
    { 
     get 
     { 
      if (_myTabs == null) 
      { 
       _myTabs = new List<Tab>(); 
      } 
      return _myTabs; 
     } 

    } 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    MyRepeater.DataSource = MyTabs.ToArray(); 
    MyRepeater.DataBind(); 
} 

somehwere dans App_Code fichiers cs

public class Tab 
    { 
    private string _sectionId; 

    public Tab(): this(String.Empty) 
     { 
     } 
    public Tab(string sectionid) 
    { 
     _sectionId = sectionid; 
    } 

    [Category("Behavior"), 
    DefaultValue(""), 
    Description("Section Id"), 
    NotifyParentProperty(true), 
    ] 
    public String SectionId 
    { 
     get 
     { 
      return _sectionId; 
     } 
     set 
     { 
     _sectionId = value; 
     } 
    } 
} 

dans votre page ASPX

<bni:tabs id="s" runat="server"> 
    <w:tab sectionid="23" /> 
</bni:tabs> 

la raison im d'entrer dans ce trouble est basique: Je suis un développeur frontal, ne veut pas voir une seule balise html dans le code derrière!

0

Je crois que ce que vous cherchez est la liaison de données à une liste.

   <ItemTemplate> 
        <tr> 
         <td> <%# DataBinder.Eval(Container.DataItem, "Name") %></td> 
         <td> <%# DataBinder.Eval(Container.DataItem, "Ticker") %></td> 
        </tr> 
       </ItemTemplate> 

Et dans le behind:

class theData { public string Name { get; set; } public string Ticker { get; set; } } 
var source = new List<theData>(); 
rpContent.DataSource = source; 
rpContent.DataBind(); 
+0

non im non, je veux récupérer la liste des onglets puis le lier à un répéteur unternal – Ayyash

0

Alors voulez-vous y accéder en tant que contrôle enfant?

protected void rpContent_itemdatabound(object sender, EventArgs e) 
    { 
     var theTabs = rpContent.FindControl("tabs") as tabs; 
     if (theTabs != null) 
      ... 
    } 
+0

non, je ne veux pas accéder à un répétiteur chhild, je veux accéder à un enfant de contrôle – Ayyash

Questions connexes