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