3

我有一个自定义 Web 部件,我试图在其上调用 RenderContents 方法,但结果仅包含 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

这是因为当您仅实例化一个控件并在其上调用 RenderControl 时,没有将其添加到 Controls 集合中,那么它不是导致所有事件触发的 Page 生命周期的一部分。

特别是没有调用调用 EnsureChildControl 的 PreRendering。

简单的解决方案是像这样覆盖 Render:

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

我建议在 render 方法中编写您的代码,而不是在 createchild 控件中编写

于 2011-03-24T07:17:34.840 回答