我有一个自定义的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中获得控件也添加到输出中?

最佳答案

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

特别是不会调用调用确保儿童控件的PreRendering。

简单的解决方案是像这样重写Render:

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

关于asp.net - WebPart RenderControl不呈现内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5413369/

10-10 23:37