查找动态创建的控件

本文关键字:控件 创建 动态 查找 | 更新日期: 2023-09-27 17:54:27

我动态地创建了一个HTML表,其中填充了devex单选列表控件并将其添加到页面中。

//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);

我在这里错过了什么?

查找动态创建的控件

问题是页面。FindControl方法不会搜索页面上的所有控件。它只搜索控件的顶层。您必须使用page搜索页面上的所有控件。FindControl和Control。FindControl,可能是递归的

另一个问题,您的意思是在回发中还是在同一个请求中找到单选按钮?如果您的意思是在回发中,那么您还必须在回发中重新生成控件,就像Aniket提到的那样。

根据Maarten的回答,这里是直接从我们大师的博客中挑选的递归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; 
}