我正在尝试在代码中加载用户控件并将输出存储为字符串变量。目前我已经得到了以下代码:
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
WidgetControlBase widget = (WidgetControlBase)LoadControl("/controls/mycontrol.ascx");
widget.RenderControl(htw);
问题是RenderControl
方法不会触发任何控件事件,因此我在控件Page_Load
中添加的任何内容都不会发生。
我尝试在PlaceHolder
中加载控件,然后像这样呈现PlaceHolder
:
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
WidgetControlBase widget = (WidgetControlBase)LoadControl("/controls/mycontrol.ascx");
myPlaceholder.Controls.Add(widget);
myPlaceholder.RenderControl(htw);
然而,这似乎与在控件上直接使用RenderControl
直接相同,它也不会触发任何事件。
有没有办法在仍然触发控件事件的同时获取包含控件内容的字符串?
答案 0 :(得分:0)
我认为您正试图将控件呈现在页面生命周期中的错误点。尝试将代码从Page_Load移动到PreInit,如下所示:
protected override void OnPreInit(EventArgs e)
{
//custom code
base.OnPreInit(e);
}
有关页面生命周期的详细信息,请访问: http://www.codeasp.net/articles/asp.net/20/aspnet-page-lifecycle