2011-01-19 37 views
1

私はaspコントロール(< asp:Button runat = "server" ID = "btn"/>)を持つUserControlを持っています。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); 

それは=「server」をラナた各コントロールは、フォームになければならないと言うので、それが動作しません。

私はまた2を試してみました:loader.Formがnullであるので、

私は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

このコードを2番目のTRYに追加しました。PlaceHolder ph = new PlaceHolder(); ph.Controls.Add(Ctrl); loader.Form.Controls.Add(ph); loader.ProcessRequest(context);しかし、StringWriterはまだ空です – theateist

関連する問題