日期:2014-05-18  浏览次数:20450 次

asp.net findControl函数的疑问
我在网上看的时候说,control1.findControl()查找范围是跟control1在同一个命名空间(貌似就是NamingContainer)中的控件。但是我编写程序的时候遇到了个很奇怪的现象。
我的页面设计代码的层次是
default.master
-----+Content
----------+LoginView
---------------+MultiView
--------------------+Lable1
--------------------+GridView
-------------------------+TemplateField
------------------------------+Button1
------------------------------+TextBox1
Button1的onClick事件代码在下面
 protected void Button1_Click(object sender, EventArgs e)
{
  Button btn = (Button)sender;
  GridViewRow gvr = (GridViewRow)btn.NamingContainer;
  GridView gv = (GridView)gvr.NamingContainer;
  TextBox tb = (TextBox)btn.FindControl("TextBox1");//btn跟tb的NamingContainer相同
  TextBox tbb = (TextBox)gvr.FindControl("TextBox1");//gvr是tbb(tbb跟tb是一个对象)的NamingContainer
  Label l = (Label)gv.NamingContainer.FindControl("Label1");//l和gv的NamingContainer就是LoginView
  Label ll = (Label)gv.FindControl("Label1");//ll和l是同一个对象,在这里反而获得不到对象
  ...
}
在调试状态下,tb和tbb都能获得对象,但是l和ll却是l有对象ll为null。
小弟不解的是,对于TextBox1不论跟他同在一个NamingContainer的控件还是他的NamingContainer控件本身调用findControl函数都能找到TextBox1。而同理情况下,Label1只有他的NamingContainer控件才能通过findControl函数获得其对象。
以上NamingContainer都是看过调试状态信息的,没有错误。求高手解答啊。

------解决方案--------------------
路过帮顶..............
------解决方案--------------------
gv.Parent试试
------解决方案--------------------
很少用服务器控件,帮顶!