У меня есть пользовательский элемент управления, состоящий из двух вложенных аккордеонов с ретранслятором внутри, которые все извлекаются из базы данных. Повторитель имеет флажки с MutuallyExclusiveCheckBoxExtenders внутри. Когда страница отправляется обратно, я пытаюсь использовать LINQ вместе с рекурсивной функцией FindControl, чтобы собрать все CheckBoxes. Проблема в том, что флажки не находятся.
Базовая структура, очищенная для краткости:
<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);
}
}
Эта функция никогда не находит флажки для их возврата, даже если она отображается правильно.