ASP.net .FindControl()和GridView返回null

我查看了网站上的页面,但似乎无法找到适合我的问题的一般内容,所以希望有人知道该怎么做。 我正在调试别人写的一些代码,并且我遇到了GridView语句的问题。

我的问题是我的gridview始终为null。 我在一个LoginView中的面板中有一个声明的GridView,它基本上设置如下。

  Please  Log In     

之后,在C#文件中,我有以下语句

  GridView GridView1 = (GridView)LoginView1.FindControl("GridView1"); 

当我去运行代码时,我在GridView1上得到了NullRefrenceException。 我是否需要深入了解面板以引用GridView,还是应该能够从主LoginView1段访问它?

编辑:更改了我的代码段以包含匿名模板的信息

寻找儿童控制的控制是一个很大的问题。 您可以考虑使用扩展方法,这样您就可以轻松调用Jeff Atwood的递归子控件(如Simon的答案所述)……或者您编写的任何版本。 这只是使用其他post中的代码的示例:

 GridView GridView1 = (GridView)LoginView1.FindControlRecursive("GridView1"); 

这是代码。

 public static class WebControlExtender { public static Control FindControlRecursive(this 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; } } 

FindControl只会检查您正在使用它的控件的直接后代。 它不会通过儿童 – 孩子递归递送。

杰夫阿特伍德实际上曾在博客中发表过这样的观点:

http://www.codinghorror.com/blog/2005/06/recursive-pagefindcontrol.html