2011-01-19 93 views
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。正如我上面提到的,我想這樣做。

謝謝

回答

0

不使用Form.Controls.Add,

添加一個佔位符控件的形式。並將控件添加到PlaceHolder。

PlaceHolder.Controls.Add(ctrl);

試試這個。

+0

我添加到第二個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