2012-02-02 73 views
3

對於電子商務系統,在下訂單之後,我有一個顯示訂單詳細信息的自定義用戶控件。我還希望將相同的訂單詳細信息寫入電子郵件,因此我想將用戶控件的內容寫入可添加到電子郵件正文中的字符串。如何將控件呈現的HTML寫入字符串

我試過使用RenderControl,但是沒有用戶控件上的動態填充標籤控件被填充。

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

我發現別的地方,我可以在控件添加到頁面,然後寫入頁的輸出到字符串,但這種感覺缺憾。

看來我應該能夠捕獲控件的內容時,它是第一次呈現,以便我不必重新填充它並重新呈現它。任何人都知道嗎?

如果不是,填充控件的最乾淨的方法是什麼?

+0

您需要先DataBind()控件? – Malk 2012-02-02 00:21:53

+0

您需要創建Page類的一個實例並動態添加/呈現您的用戶控件。然後,您可以將呈現的內容抓取到字符串中,您可以在此處看到一個示例(第3個代碼示例):http://encosia.com/boost-aspnet-performance-with-deferred-content-loading/ – Zachary 2012-02-02 00:28:28

回答

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(); 
} 
相關問題