Не удается найти элемент управления, когда RenderControl ascx в RenderBeginTag при переопределении Panel - PullRequest
0 голосов
/ 04 октября 2011

Я создаю контейнер, используя 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, который я рендерил, он всегда возвращает ноль!Кто-нибудь знает, что происходит?Как я могу решить эту проблему?

Кстати: я не могу добавить метод CustomControl in CreateChildControls, потому что если CustomContainer имеет кодовый блок, я получил исключение!

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

1 Ответ

0 голосов
/ 04 октября 2011

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

...