WebPart RenderControl不呈现内容

问题描述:

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

就拿这个简单的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处理程序,我试图实例化这个网络的一部分,并调用其RenderControl方法。结果是<div class="myTestWebPart"></div>

有谁知道为什么我没有从CreateChildControls获取我的控件也添加到输出?

这是因为当你只实例化一个控制和它调用RenderControl,没有它被添加到Controls集合,然后它不是导致所有事件触发的Page生命周期的一部分。

特别是调用EnsureChildControl的预渲染未被调用。

简单的解决方法是重写渲染这样的:

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

我把它,这意味着我的页面生命周期事件将无法正确要么然后解雇?我的web部分也有一个重写的OnInit方法。所以我想这也不会被解雇。另外,为了充分披露,我并没有直接实例化我的Web部件。我实际上使用SPLimitedWebPartManager获取它的一个实例(不知道这是否有所作为)。 – TehOne 2011-03-24 18:22:40

+0

这是正确的,你可以使用调试器来验证它。 – 2011-03-25 20:42:45

我会建议在编写代码渲染方法,而不是在拥有CreateChild控制写