页面控件的扩展方法 - 错误

时间:2012-08-03 12:01:45

标签: c#

我为页面控件编写了一个小扩展方法,以递归方式搜索控件。但我得到“对象引用未设置为对象的实例”异常。

似乎是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 ...

但是这个在循环中间的某处抛出。

2 个答案:

答案 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;