我有一個用戶控件,包含兩個內置中繼器的嵌套式手風琴,所有這些都是從數據庫中提取的。中繼器內部帶有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