【问题标题】:How can I write the HTML Rendered by a control to a string如何将控件呈现的 HTML 写入字符串
【发布时间】:2012-02-02 11:42:42
【问题描述】:

对于电子商务系统,下订单后,我有一个显示订单详细信息的自定义用户控件。我还想将相同的订单详细信息写入电子邮件,因此我想将用户控件的内容写入可以添加到电子邮件正文的字符串。

我尝试使用 RenderControl,但是没有填充用户控件上的动态填充标签控件。

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

我在其他地方找到了可以将控件添加到页面,然后将页面的输出写入字符串的地方,但这感觉很笨拙。

似乎我应该能够在第一次渲染控件时捕获它的内容,这样我就不必重新填充它并重新渲染它。有人知道怎么做吗?

如果不是,那么填充控件的最简洁方法是什么?

【问题讨论】:

  • 你需要先DataBind()这个控件吗?
  • 您需要创建一个 Page 类的实例并动态添加/呈现您的用户控件。然后您可以将渲染的内容抓取到一个字符串中,您可以在此处查看示例(第三个代码示例):encosia.com/…

标签: asp.net user-controls render


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2022-08-24
    • 1970-01-01
    • 2019-07-22
    • 2018-08-30
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多