2009-10-01 53 views
0

我一直在搜索整個msdn,但我不知道我應該在尋找什麼......我如何訪問用戶控件的子元素,我不希望創建一個新的自定義控件來呈現它自己的html, HTML輸出是一個ASCX文件的簡單轉發器,它看起來像這樣:在.net中以編程方式檢索用戶控件子元素,如何?

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

我想實現看起來像這樣:

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

所以基本上在後面的代碼,我想檢索數組或列表中的兒童的集合,並做一些工作與ids,然後將結果集綁定到我的中繼器...

回答

0

我發現瞭解決方案,再次,我自己!

在後面

[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中的app_code ASCX代碼

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; 
     } 
    } 
} 
在你的aspx頁面

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

的原因我去到這個問題是基本的:我一個前端開發者,不想在後面的代碼中看到一個單一的html標籤!

0

我相信你要找的是數據綁定到列表。

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

而在代碼隱藏:

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

沒有即時消息不,我想retreive選項卡的列表,然後將其綁定到一個非一直的repeater – Ayyash 2009-10-01 03:16:08

0

然後你要訪問它作爲一個孩子的控制?

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

nope,我不想訪問中繼器chhild,我想訪問控件的孩子 – Ayyash 2009-10-01 21:45:06

相關問題