2011-09-20 35 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

回答