我有一个用户控件,包含两个内置中继器的嵌套式手风琴,所有这些都是从数据库中提取的。中继器内部带有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);
}
}
此功能从来没有发现的复选框,以回报他们,即使它正确显示。
从你的例子看来,你的控件上缺少'runat =“server”'。 – CAbbott
@PCasagrande我也遇到过这个问题。但后来发现你必须用Foreach循环枚举Accordian窗格并检查控件是否存在。并不是像你现在编码一样控制层次结构的密集方式 – Deeptechtons
@ CAbbott我从应该不相关的例子中剥去了一切。 Runat代码,用于数据绑定的事件触发器和包含的css类。所以这不是问题。 – PCasagrande