Не удается найти элемент управления при отображении ascx в RenderBeginTag при переопределении Panel

#asp.net #user-controls #overriding #findcontrol #webusercontrol

#asp.net #пользовательские элементы управления #переопределение #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 in CreateChildControls , потому что, если CustomContainer у него есть блок кода, я получил исключение!

Коллекция элементов управления не может быть изменена, поскольку элемент управления содержит блоки кода (т.е. <% … %>).

Ответ №1:

Вероятно, вы вызываете ShowMessage перед отображением элемента управления. Попробуйте вызвать ShowMessage во OnPreLoad время или OnLoad . В принципе, где угодно после Render .