我正在动态创建一个填充了devex单选列表控件并将其添加到页面的HTML表。
//Create the radio list
ASPxRadioButtonList radButt = new ASPxRadioButtonList();
radButt.ID = "audit-" + audType;
tableCell2.Controls.Add(radButt);
tableRow.Cells.Add(tableCell2);
auditTable.Rows.Add(tableRow);
这一切都很好。
现在,在回调中,我想获取该无线电列表并获得其设置...所以我正在尝试这个,但一直都是NULL。
ASPxRadioButtonList audRad = (ASPxRadioButtonList)Page.FindControl("audit-" + audType);
我在这里缺少什么?
答案 0 :(得分:2)
问题是Page.FindControl方法不会搜索页面上的所有控件。它只搜索顶层控件。您必须使用Page.FindControl和Control.FindControl搜索页面上的所有控件,可能是递归的。
另一点,你的意思是在回发中,或在同一个请求中找到radiobutton?如果你的意思是在回发中,那么你也必须在回发中重新生成控件,就像Aniket所说的那样。
答案 1 :(得分:2)
根据Maarten的回答,这是一个直接从our Master's blog挑选的递归FindControl解决方案:
private Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}