WebPart RenderControl não renderiza conteúdo
-
29-10-2019 - |
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?
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