2012-02-02 3 views
3

電子商取引システムの場合、注文後に注文の詳細を表示するカスタムユーザーコントロールがあります。私は電子メールに同じ注文の詳細を書きたいので、ユーザーコントロールの内容を電子メールの本文に追加できる文字列に書きたいと思っています。コントロールを文字列にレンダリングするにはどうすればいいですか

RenderControlを使用しようとしましたが、ユーザーコントロールの動的に設定されたラベルコントロールには値が設定されませんでした。

StringBuilder sb = new StringBuilder(); 
    StringWriter sw = new StringWriter(sb); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    OrderDetails1.RenderControl(htw); 
    return sb.ToString(); 

は、私がどこかに私がページにコントロールを追加して、文字列へページの出力を書きますが、これはクルージ的に感じたことを見出しました。

コントロールを最初にレンダリングするときにコントロールの内容をキャプチャして、再ペイントして再レンダリングする必要がないようです。誰でも知っている?

そうでない場合は、コントロールを作成する最もクリーンな方法は何ですか?

+0

コントロールを最初にDataBind()する必要がありますか? – Malk

+0

Pageクラスのインスタンスを作成し、それにユーザーコントロールを動的に追加/レンダリングする必要があります。次に、レンダリングされたコンテンツを文字列に取り込むことができます。ここでは例を見ることができます(3番目のコード例):http://encosia.com/boost-aspnet-performance-with-deferred-content-loading/ – Zachary

答えて

1

RenderControlコードが適切であることがわかりました。私は、コントロールFillData()を呼び出して、データベースからコントロールを再投入する必要がありました。

private string RenderOrderInfo() 
{ 
    //TODO: Should be able to use RenderControl for this and delete everything beyond the 1st 3 lines 
    StringBuilder sb = new StringBuilder(); 
    StringWriter sw = new StringWriter(sb); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 
    OrderDetails1.FillData(); 
    OrderDetails1.RenderControl(htw); 
    return sb.ToString(); 
} 
関連する問題