WebPart RenderControl не отображает содержимое - PullRequest
3 голосов
/ 24 марта 2011

У меня есть пользовательская веб-часть, для которой я пытаюсь вызвать метод 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 ]

2 голосов
/ 24 марта 2011

Это потому, что когда вы только создаете экземпляр элемента управления и вызываете для него RenderControl, без его добавления в коллекцию элементов управления, это не является частью жизненного цикла страницы, что вызывает срабатывание всех событий.

В частности, PreRendering, который вызывает EnsureChildControl, не вызывается.

Простое решение - переопределить Render следующим образом:

protected override void Render(HtmlTextWriter writer)
{
  EnsureChildControls();
  base.Render(writer);
}
0 голосов
/ 24 марта 2011

я бы предложил написать свой код в методе рендеринга, а не писать в элементе управления createchild

...