3

RenderContents メソッドを呼び出そうとしているカスタム Web パーツがありますが、結果には Web パーツの周囲の div のみが含まれ、子コントロールは含まれません。

たとえば、次の単純な Web パーツを考えてみましょう。

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 ハンドラーで、この Web パーツをインスタンス化し、その RenderControl メソッドを呼び出そうとしています。結果は<div class="myTestWebPart"></div>です。

CreateChildControls からコントロールが出力に追加されない理由を知っている人はいますか?

4

2 に答える 2

2

これは、Controls コレクションに追加せずに、コントロールをインスタンス化して RenderControl を呼び出すだけの場合、すべてのイベントを発生させる Page ライフサイクルの一部ではないためです。

特に、EnsureChildControl を呼び出す PreRendering は呼び出されません。

簡単な解決策は、次のように Render をオーバーライドすることです。

protected override void Render(HtmlTextWriter writer)
{
  EnsureChildControls();
  base.Render(writer);
}
于 2011-03-24T07:45:15.480 に答える
0

createchild コントロールではなく、render メソッドでコードを記述することをお勧めします

于 2011-03-24T07:17:34.840 に答える