Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Web部件渲染控件不';不渲染内容_Asp.net_Sharepoint_Web Parts_Httphandler_Rendercontrol - Fatal编程技术网

Asp.net Web部件渲染控件不';不渲染内容

Asp.net Web部件渲染控件不';不渲染内容,asp.net,sharepoint,web-parts,httphandler,rendercontrol,Asp.net,Sharepoint,Web Parts,Httphandler,Rendercontrol,我有一个自定义web部件,我正试图调用其上的RenderContents方法,但结果只包含web部件周围的div,而不包含任何子控件 以这个简单的web部件为例: namespace MyWebParts { public class MyTestWebPart : WebPart { public MyTestWebPart() { this.CssClass = "myTestWebPart"; } protected override v

我有一个自定义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方法。结果是


有人知道为什么我没有从CreateChildControls获取控件并将其添加到输出中吗?

我建议使用render方法编写代码,而不是使用CreateChildControls编写代码,这是因为当您仅实例化控件并对其调用RenderControl时,没有将其添加到控件集合中,然后,它不是页面生命周期的一部分,它会引发所有事件

特别是不调用调用EnsureChildControl的预呈现

简单的解决方案是按如下方式覆盖渲染:

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

我认为这意味着我的页面生命周期事件也不会正确触发?我的web部件中也有一个重写的OnInit方法。所以我猜这也不会被解雇。另外,为了完全公开,我没有直接实例化我的web部件。实际上,我使用SPLimitedWebPartManager获得了一个实例(不确定这是否有区别)。