asp.net FindControl方法误区和解析 程序员文章站 2024-03-06 10:27:55 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 上一篇: idea中创建多module的maven工程的方法 下一篇: 直接拿来用的Android刮奖控件 推荐阅读 Asp.net中static变量和viewstate的使用方法(谨慎) 一个Asp.Net的显示分页方法 附加实体转换和存储过程 带源码下载 ASP.NET Web页生命周期和执行的方法介绍 解析Java中的队列和用LinkedList集合模拟队列的方法 解析Java继承中方法的覆盖和重载 Asp.net中static变量和viewstate的使用方法(谨慎) asp.net获取URL和IP地址的方法汇总 ASP.NET Get和Post两种提交方法浅析 Android手机端小米推送Demo解析和实现方法 Asp.net GridView隔行变色和光棒效果2种方法实现