1.在母版页中,如果需要找母版页中的控件:
this.FindControl("控件ID");2.在母版页中,如果需要找ContentPage的控件,可以用:
this.FindControl("ContentPlaceHolderID").FindControl("控件ID");3.在ContentPage中,如果需要找母版页中的控件,可以直接调用:
this.Master.FindControl("控件ID");4.可是,为什么在ContentPage中找自己页面里的控件,必须先通过找到母版页中的ContentPlaceHolder,然后再找其中的控件:
this.Master.FindControl("ContentPlaceHolderID").FindControl("控件ID");难道ContentPage连自己页面里的控件,都不能直接通过:
this.FindControl("控件ID");来找到吗?这种设计太怪异了,敢问各位前辈,这到底是为什么?
this.FindControl("控件ID");2.在母版页中,如果需要找ContentPage的控件,可以用:
this.FindControl("ContentPlaceHolderID").FindControl("控件ID");3.在ContentPage中,如果需要找母版页中的控件,可以直接调用:
this.Master.FindControl("控件ID");4.可是,为什么在ContentPage中找自己页面里的控件,必须先通过找到母版页中的ContentPlaceHolder,然后再找其中的控件:
this.Master.FindControl("ContentPlaceHolderID").FindControl("控件ID");难道ContentPage连自己页面里的控件,都不能直接通过:
this.FindControl("控件ID");来找到吗?这种设计太怪异了,敢问各位前辈,这到底是为什么?
解决方案 »
- Ajax CalendarExtender控件总题
- 用ModalPopup控件获取TextBox的输入值
- 水晶报表参数传递问题!及dataset的使用问题
- 网站首页使用什么缓存最好
- 高手帮我看看 我这样的设计结构好吗?
- 从数据库取出一条记录内容与直接读取指定记录文件的内容,哪个快些?
- 如何实现在asp.net页面中用vb.net做弹出对话框……急!!
- 一个关于FLASH的链接问题?很急,在线等待,实现就揭帖!!!!!!!!!!!!!!
- 使用dojo的一个对话框功能,对话框有个提交按钮,怎么执行cs里的程序呢?
- 这个小逻辑怎么实现?
- 无法将类型为“DataBoundLiteralControl”的对象强制转换为类型“WebControls.DropDownList”
- 在asp.net中,用js控制windows media player,实现连续播放代码
你的这个问题问得非常好。但是我觉得最近csdn的气氛,还是期望自己去深入理解asp.net的findcontrol的源代码,有一点心得然后讨论比较好。自己读一些源代码,培养动手去看源代码的思路,不要都是深手让别人灌输一点概念。
楼主的问题其实跟“命名容器”这个概念有关。比如Page下放一个文本框,ID为TextBox1,在GridView里再放一个TextBox1,在Repeater里再放一个TextBox1,在母版页里再放一个,在用户控件里再放一个。你看到:同一页面里又可以存在多个TextBox1,为何?因为这些TextBox1位于不同的命名容器里,它们的UniqueID会自动加上前缀(除了在不是命名容器的Page里的控件)。FindControl方法是根据ID在当前命名容器范围内(或Page)的某个控件下递归地寻找控件,它寻找控件时不能进入另一个命名容器。哪些是命名容器呢?GridViewRow、DataListItem、RepeaterItem、用户控件、母版页等等。
楼主的问题其实跟“命名容器”这个概念有关。比如Page下放一个文本框,ID为TextBox1,在GridView里再放一个TextBox1,在Repeater里再放一个TextBox1,在母版页里再放一个,在用户控件里再放一个。你看到:同一页面里又可以存在多个TextBox1,为何?因为这些TextBox1位于不同的命名容器里,它们的UniqueID会自动加上前缀(除了在不是命名容器的Page里的控件)。FindControl方法是根据ID在当前命名容器范围内(或Page)的某个控件下递归地寻找控件,它寻找控件时不能进入另一个命名容器。哪些是命名容器呢?GridViewRow、DataListItem、RepeaterItem、用户控件、母版页等等。
寻找控件时会判断其是否实现了INamingContainer接口,如果是的话,就不进入它里面寻找。
谢谢解答下个 帖子不能沉啊
这个问题没解决 帖子不能沉啊问题是这样的 比如我通过post传递一个300字左右的文章 没问题但是传递500字的时候 SessionID这个唯一标识丢掉了
比如按照上面的配置 cookieless="true"才行 但是缺点是出现SESSION在地址栏有没有其他办法可以解决问题谢谢了
楼主的问题其实跟“命名容器”这个概念有关。比如Page下放一个文本框,ID为TextBox1,在GridView里再放一个TextBox1,在Repeater里再放一个TextBox1,在母版页里再放一个,在用户控件里再放一个。你看到:同一页面里又可以存在多个TextBox1,为何?因为这些TextBox1位于不同的命名容器里,它们的UniqueID会自动加上前缀(除了在不是命名容器的Page里的控件)。FindControl方法是根据ID在当前命名容器范围内(或Page)的某个控件下递归地寻找控件,它寻找控件时不能进入另一个命名容器。哪些是命名容器呢?GridViewRow、DataListItem、RepeaterItem、用户控件、母版页等等。
寻找控件时会判断当前的容器控件其是否实现了INamingContainer接口,如果是的话,就不进入它里面寻找。