【发布时间】:2011-01-19 10:26:14
【问题描述】:
我有带有 asp 控件的 UserControl(),我想渲染它。
我试过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 为空,我创建了 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 是空的
我的错误在哪里。 请不要告诉我将 Page 添加到解决方案并覆盖 OnRender。我想按照上面提到的那样去做。
谢谢
【问题讨论】:
标签: asp.net