1
我有用户控件有asp控件(< asp:Button runat =“server”ID =“btn”/ >),我想呈现它。如何动态加载包含asp控件的用户控件
我试过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 =控制“服务器”必须在表格。
我也试过2:
因为loader.Form是空的,我创建HtmlForm控件并添加了Ctrl键,然后加入到HtmlForm控件装载机的控制权,但它说,它有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的是空
哪里是我的错误。 请不要告诉我将页面添加到解决方案并重写OnRender。正如我上面提到的,我想这样做。
谢谢
我添加到第二个TRY这个代码:PlaceHolder ph = new PlaceHolder(); ph.Controls.Add(ctrl); loader.Form.Controls.Add(ph); loader.ProcessRequest(context);但StringWriter仍然是空的 – theateist 2011-01-19 10:52:47