2011-09-20 85 views
3

我有一個用戶控件,包含兩個內置中繼器的嵌套式手風琴,所有這些都是從數據庫中提取的。中繼器內部帶有MutuallyExclusiveCheckBoxExtenders複選框。當頁面回傳時,我試圖使用LINQ和遞歸的FindControl函數來收集所有的CheckBox。問題是CheckBoxes沒有被找到。C#在嵌套的Accordions中查找控件的問題

基本結構,清理爲簡潔:

<ajaxToolkit:Accordion ID="acc1"> 
    <ContentTemplate> 
     <ajaxToolkit:Accordion ID="acc2"> 
      <ContentTemplate> 
       <asp:Repeater ID="r1"> 
        <ItemTemplate> 
         <asp:CheckBox ID="cb1" /> 
         <asp:CheckBox ID="cb2" /> 
         <ajaxToolkit:MutuallyExclusiveCheckBoxExtender ID="mece1" TargetControlID="cb1" /> 
         <ajaxToolkit:MutuallyExclusiveCheckBoxExtender ID="meceMine2" TargetControlID="cb2" /> 
        </ItemTemplate> 
       </asp:Repeater> 
      </ContentTemplate> 
     </ajaxToolkit:Accordion> 
    </ContentTemplate> 
</ajaxToolkit:Accordion> 

一切都顯示正確。點擊按鈕,在頁面的其他地方,我試圖收集所有的控件,只顯示手風琴控件,一些文字和我正在使用的隱藏字段。

這裏是遞歸FindControls功能,我使用:

public static void FindControls(Control start, List<Control> list) 
{ 
    list.Add(start); 

    foreach (Control c in start.Controls) 
    { 
     FindControls(c, list); 
    } 
} 

此功能從來沒有發現的複選框,以回報他們,即使它正確顯示。

+2

從你的例子看來,你的控件上缺少'runat =「server」'。 – CAbbott

+0

@PCasagrande我也遇到過這個問題。但後來發現你必須用Foreach循環枚舉Accordian窗格並檢查控件是否存在。並不是像你現在編碼一樣控制層次結構的密集方式 – Deeptechtons

+0

@ CAbbott我從應該不相關的例子中剝去了一切。 Runat代碼,用於數據綁定的事件觸發器和包含的css類。所以這不是問題。 – PCasagrande

回答