Asp.net Web部件渲染控件不';不渲染内容
我有一个自定义web部件,我正试图调用其上的RenderContents方法,但结果只包含web部件周围的div,而不包含任何子控件 以这个简单的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
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获得了一个实例(不确定这是否有区别)。