欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net FindControl方法误区和解析

程序员文章站 2024-03-07 12:26:09
1.认为findcontrol方法寻找的范围是给定control的后代控件。 复制代码 代码如下:
1.认为findcontrol方法寻找的范围是给定control的后代控件。

如上面代码,后台用panel1.findcontrol("button1")寻找,认为这样范围小些可以提高效率,其实即使用textbox1.findcontrol("button1")也一样能找到。前有所述,findcontrol方法是根据id在control所在的命名容器中寻找相应控件。当执行textbox1.findcontrol("button1")时,asp.net先获取textbox1.namingcontainer,其值为页面本身(最后生成的xxxx_aspx类实例),再向下递归寻找相应id的控件,所以一样能找到button1。

同样的,如果用textbox1.findcontrol("label1")也是能找到label1的。

2.不理解为什么this.findcontrol方法找不到gridview里的控件。

其实很好理解,findcontrol方法寻找时只在本命名容器下寻找,不会进入其他命名容器中寻找,而命名容器(namingcontainer)不只是页面本身,还包括gridviewrow、datalistitem、repeateritem、usercontrol、masterpage等等诸多控件,这些都继承了inamingcontainer接口,它们的一个显著特征是其子控件的uniqueid和clientid一般都不同于id(除了顶层的页面对象)。

3.认为findcontrol运行效率差。

实际上asp.net运行时分析aspx、ascx、master等文件标签结构,生成类似dom的控件树,一般对树的查询操作效率还是比较高的,尤其当问题规模不太大时。一般来说,实际页面里的控件数量不可能成千上万,而且寻找时又不能越过本命名容器,这些因素限制了问题规模。所以说findcontrol的效率并不差。
相关标签: asp.net FindControl