我有一个自定义的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的控件也添加到输出中吗?
发布于 2011-03-24 15:45:15
这是因为当您只实例化一个控件并在其上调用RenderControl时,如果没有将其添加到Controls集合中,那么它就不是导致所有事件触发的页面生命周期的一部分。
特别是调用EnsureChildControl的PreRendering没有被调用。
最简单解决方案是覆盖呈现,如下所示:
protected override void Render(HtmlTextWriter writer)
{
EnsureChildControls();
base.Render(writer);
}发布于 2011-03-24 15:17:35
我建议用render方法编写代码,而不是用createchild控件编写
https://stackoverflow.com/questions/5413369
复制相似问题