WebPart RenderControl не отображает содержимое
У меня есть пользовательская веб-часть, для которой я пытаюсь вызвать метод RenderContents, но результаты содержат только окружающий div для веб-части, а не дочерние элементы управления.
Возьмем, к примеру, эту простую веб-часть:
namespace MyWebParts
{
public class MyTestWebPart : WebPart
{
public MyTestWebPart()
{
this.CssClass = "myTestWebPart";
}
protected override void CreateChildControls()
{
base.CreateChildControls();
this.Controls.Add(new LiteralControl("Nothing here yet."));
}
}
}
Затем в обработчике http я пытаюсь создать экземпляр этой веб-части и вызвать ее метод RenderControl. Результат <div class="myTestWebPart"></div>
,
Кто-нибудь знает, почему я не получаю свои элементы управления из CreateChildControls также добавлены в вывод?
2 ответа
Это потому, что когда вы только создаете экземпляр элемента управления и вызываете для него RenderControl, без его добавления в коллекцию элементов управления, это не является частью жизненного цикла страницы, что вызывает срабатывание всех событий.
В частности, PreRendering, который вызывает EnsureChildControl, не вызывается.
Простое решение - переопределить Render следующим образом:
protected override void Render(HtmlTextWriter writer)
{
EnsureChildControls();
base.Render(writer);
}
Я бы предложил написать свой код в методе рендеринга, а не писать в элементе управления createchild