FindControl 问题, 请进!
我用了三种方式:
targetGridControl = this.Page.FindControl( "grid ")
targetGridControl = this.Page.Master.FindControl( "grid ")
targetGridControl = this.FindControl( "grid ")
在自定义控件的OnPreRender/Render和CreateChildControls方法中都找不到该控件,
该Grid控件在页面确实存在.
原因是: 我的Test.aspx页面继承了MasterPage之后就找不到了; 如果不继承MasterPage是可以找到该控件的.
如果一定要用到MasterPage, 应该怎么解决?
谢了!
------解决方案--------------------sf
------解决方案--------------------“Master.FindControl( "ContentPlaceHolder1 ").FindControl( "你要查找的控件ID ")”来查找
------解决方案--------------------你的控件id被改变了
变成ContentPlaceHolder_controlname这种形式
你看看变成什么了
察看源代码可以看见
------解决方案--------------------up
------解决方案--------------------OnPreRender/Render在页面呈现之前并没有加载你想要的控件,你在其它的地方可以试一下,看能不能找到,可以把页面Trace= "true "加上,看看你的控件名称有没有错误
------解决方案--------------------楼主没有理解Master与Page加载的先后顺序
母版面与内容页事件加载顺序这样的:
母版页控件初始化
内容页控件初始化
母版页初始化
内容页初始化
内容页加载
母版页加载
...
在母版页控件初始化的时候,内容页控件还没有初始化,怎么能加载?
------解决方案--------------------LS说的不错,另外就是ASP.NET控件树的问题,首先控件不是在Page的ControlCollection下的,它的下面只有一个根,根下面一般有3个分支,分支下面才能找到,例如:
foreach(Control c in page.Controls)
{
c.Controls.FindControl( " ");
}
如果还在下一层的话就继续遍历