我有UserControl,它有asp控件(< asp:Button runat =“server”ID =“btn”/>),我想渲染它。
我试过1:
Page loader = new Page();
Control ctrl = loader.LoadControl("WebUserControl1.ascx");
loader.Controls.Add(ctrl);
loader.ProcessRequest(context);
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
loader.RenderControl(htw);
它不起作用,因为它说每个具有runat =“server”的控件必须是Form。
我也试过2:
因为loader.Form为null,我创建了HtmlForm并将ctrl添加到它,然后将HtmlForm添加到loader的Control中,但是它说它有2个HtmlForm。所以,我把HtmlForm“注入”加载器就像这样
Page loader = new Page();
HtmlForm form = new HtmlForm();
var method = loader.GetType().GetMethod("SetForm", BindingFlags.NonPublic | BindingFlags.Instance);
method.Invoke(loader, new object[] { form });
Control ctrl = loader.LoadControl("WebUserControl1.ascx");
loader.Form.Controls.Add(ctrl);
loader.ProcessRequest(context);
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
loader.RenderControl(htw);
现在没有发生错误,但StringWriter为空
我的错误在哪里。 请不要告诉我将Page添加到解决方案并覆盖OnRender。我想像上面提到的那样去做。
谢谢
答案 0 :(得分:0)
不要使用Form.Controls.Add,
将PlaceHolder控件添加到Form。并将控件添加到PlaceHolder。
PlaceHolder.Controls.Add(CTRL);
试试这个。