WebPart RenderControl不呈现内容

时间:2011-03-24 00:34:12

标签: asp.net sharepoint web-parts httphandler rendercontrol

我有一个自定义Web部件,我试图调用RenderContents方法,但结果只包含Web部件的周围div,而不是任何子控件。

以这个简单的网络部分为例:

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中获取我的控件也添加到输出中?

2 个答案:

答案 0 :(得分:2)

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

特别是调用EnsureChildControl的PreRendering不会被调用。

简单的解决方案是覆盖Render,如下所示:

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

答案 1 :(得分:0)

我建议用render方法编写代码,而不是用createchild control编写