#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
.