我有一个自定义的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中获得控件也添加到输出中?
最佳答案
这是因为当您仅实例化一个控件并在其上调用RenderControl而不将其添加到Controls集合时,它就不是导致所有事件触发的Page生命周期的一部分。
特别是不会调用调用确保儿童控件的PreRendering。
简单的解决方案是像这样重写Render:
protected override void Render(HtmlTextWriter writer)
{
EnsureChildControls();
base.Render(writer);
}
关于asp.net - WebPart RenderControl不呈现内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5413369/