Frage

Ich habe ein benutzerdefiniertes Webpart, für das ich die RenderContents-Methode aufrufen möchte, aber die Ergebnisse enthalten nur das umgebende div für das Webpart und keine untergeordneten Steuerelemente.

Nehmen Sie zum Beispiel dieses einfache Webpart:

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

Dann versuche ich in einem http-Handler, dieses Webpart zu instanziieren und seine RenderControl-Methode aufzurufen.Das Ergebnis ist <div class="myTestWebPart"></div>.

Weiß jemand, warum ich meine Steuerelemente nicht von CreateChildControls bekomme, die ebenfalls zur Ausgabe hinzugefügt wurden?

War es hilfreich?

Lösung

Wenn Sie nur ein Steuerelement instanziieren und RenderControl darauf aufrufen, ohne es einer Controls-Auflistung hinzuzufügen, ist dies nicht Teil des Seitenlebenszyklus, der dazu führt, dass alle Ereignisse ausgelöst werden.

Insbesondere wird das PreRendering, das EnsureChildControl aufruft, nicht aufgerufen.

Die einfache Lösung besteht darin, das Rendern wie folgt zu überschreiben:

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

Andere Tipps

Ich würde vorschlagen, Ihren Code in der Render-Methode zu schreiben, anstatt in der Createchild-Steuerung zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top