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

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( " ");
}
如果还在下一层的话就继续遍历