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

Другие вопросы по тегам