在重写Panel时RenderBeginTag中的RenderControl ascx时无法FindControl

时间:2011-10-04 09:25:52

标签: asp.net user-controls override findcontrol webusercontrol

我正在使用Panel控件创建容器,如下所示:

public class CustomContainer : Panel
{
 public override void RenderBeginTag(HtmlTextWriter writer)
 {
  var control this.Page.LoadControl("web user control path.ascx");
  control.ID = "userControlId";
  control.RenderControl(writer);
  base.RenderBeginTag(writer);
 }
 public void ShowMessage(string message)
 {
  var control = this.FindControl("userControlId"); // control here is null!!
  var custom = control as CustomControl;
  custom.Message = message;
 }
}

当我尝试找到我呈现的标识为userControlId的控件时,它总是返回null! 有谁知道发生了什么?我该如何解决这个问题?

顺便说一句:我无法在CustomControl方法中添加CreateChildControls,因为如果CustomContainer有代码块,我会遇到异常!

  

由于控件无法修改Controls集合   包含代码块(即<%...%>)。

1 个答案:

答案 0 :(得分:0)

您可能在呈现控件之前调用ShowMessage。尝试在ShowMessageOnPreLoad期间致电OnLoad。基本上,在Render之后的任何地方。