原先的邏輯只額外多搜尋ContentPlaceHolder的字頭(Prefix),但是若其中有UserControl,則UserControl的ClientID還會被加上UserControl的ID。例如: (UC11中只有一個TextBox1)
實際的TextBox1的ClientID會變成ctl00_Editor_UC11_TextBox1,原先的做法只會Search到ctl00_Editor_TextBox1,因此UserControl下的物件就變成化外之民。
我修改了原有的程式,將UserControl的ClientID也加入要搜索的字頭之一,同時對ContentPlaceHolder下的Control也要逐一巡迴檢查,這樣就能把UserControl下的物件納入afa_mpget的查找範圍內。
public static void searchContentPlaceHolder(Control ctrl, List<string> lst)
{ if (ctrl is ContentPlaceHolder || ctrl is UserControl)
lst.Add(ctrl.ClientID);
if (ctrl.HasControls())
{ foreach (Control c in ctrl.Controls)
searchContentPlaceHolder(c, lst);
}
}