我为页面控件编写了一个小扩展方法,以递归方式搜索控件。但我得到“对象引用未设置为对象的实例”异常。
似乎是page.Controls只有1个控件,在这个控件上我也有这个例外。
任何人都有任何想法?
以下是代码:
public static Control FindControlRecursive(this Page page, string id)
{
return Execute(page, id);
}
private static Control Execute(Control root, string id)
{
if (root.ID.Equals(id))
return root;
ControlCollection controls = root.Controls;
foreach (Control ctrl in controls)
{
Control FoundControl = Execute(ctrl, id);
if (FoundControl != null)
return FoundControl;
}
return null;
}
}
更新 现在我有另一个错误: 发生错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:index ...
但是这个在循环中间的某处抛出。
答案 0 :(得分:1)
这一行可能有一个原因:
if (root.ID.Equals(id))
不必为树中的所有控件设置ID属性。我甚至怀疑Page本身是否为空。尝试用以下内容替换此行:
if (string.Equals(root.ID, id))
答案 1 :(得分:1)
在我看来,ID可以为null,而ID.Equals()则抛出异常。 尝试更改行
if (root.ID.Equals(id))
return root;
到
if (!string.IsNullOrEmpty(root.ID) && root.ID.Equals(id))
return root;