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);
}
答
我会建议在编写代码渲染方法,而不是在拥有CreateChild控制写
我把它,这意味着我的页面生命周期事件将无法正确要么然后解雇?我的web部分也有一个重写的OnInit方法。所以我想这也不会被解雇。另外,为了充分披露,我并没有直接实例化我的Web部件。我实际上使用SPLimitedWebPartManager获取它的一个实例(不知道这是否有所作为)。 – TehOne 2011-03-24 18:22:40
这是正确的,你可以使用调试器来验证它。 – 2011-03-25 20:42:45