Pergunta

Tenho uma web part personalizada na qual estou tentando chamar o método RenderContents, mas os resultados contêm apenas a div ao redor da web part, e nenhum controle filho.

Veja por exemplo esta web part simples:

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."));
    }
  }
}

Então, em um manipulador http, estou tentando instanciar esta web part e chamar seu método RenderControl.O resultado é <div class="myTestWebPart"></div>.

Alguém sabe por que não estou recebendo meus controles de CreateChildControls também adicionados à saída?

Foi útil?

Solução

Isso ocorre porque quando você está apenas instanciando um controle e chamando RenderControl nele, sem que seja adicionado a uma coleção de Controls, então não faz parte do ciclo de vida da página que faz com que todos os eventos sejam disparados.

Em particular, o PreRendering que chama o VerifyChildControl não é chamado.

A solução fácil é sobrescrever Renderizar assim:

protected override void Render(HtmlTextWriter writer)
{
  EnsureChildControls();
  base.Render(writer);
}

Outras dicas

Eu sugeriria escrever seu código no método de renderização em vez de escrever no controle createchild

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top