Question

J'ai une pièce Web personnalisée sur laquelle j'essaie d'appeler la méthode de redendContents, mais les résultats ne contient que le div environnant pour le web partisans, et non aucun contrôle d'enfant.

Prenons par exemple ce simple web partiel:

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

Ensuite, dans un gestionnaire HTTP, j'essaie d'instancier ce web partisans et d'appeler sa méthode RenderControl. Le résultat est <div class="myTestWebPart"></div>.

Est-ce que quelqu'un sait pourquoi je n'obtiens pas mes contrôles de CreateChildControls également ajoutés à la sortie?

Était-ce utile?

La solution

C'est parce que lorsque vous n'instantiez qu'un contrôle et que vous appelez RenderControl dessus, sans qu'il soit ajouté à une collection de contrôles, cela ne fait pas partie du cycle de vie de la page qui provoque le feu de tous les événements.

En particulier, la prétention qui appelle EnsureChildControl n'est pas appelée.

La solution facile consiste à remplacer le rendu comme ceci:

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

Autres conseils

Je suggère d'écrire votre code dans la méthode de rendu plutôt que d'écrire dans CreateChild Control

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top