如何将控件呈现给字符串

时间:2011-06-29 11:39:38

标签: asp.net c#-4.0 user-controls

我一次又一次地看到它的典型答案是这样的:

public string RenderControlToHtml(Control ControlToRender)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    System.IO.StringWriter stWriter = new System.IO.StringWriter(sb);
    System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(stWriter);
    ControlToRender.RenderControl(htmlWriter);
    return sb.ToString();
}

...如果你有简单的html标签,这很好,但是当我在我的控件中有一个文本框或其他一些asp控件时,它会引发一个关于控件不在表单上的摇摆不定(事实上这是因为我正在尝试将页面的一部分呈现为一个字符串,然后我可以将其作为电子邮件发送)

所以......

我很确定之前有人问过并回答过,但我找不到真正有用的答案而感到茫然......

如何将服务器端和客户端控件的html输出呈现为.Net 4.0中的html字符串,因为看起来上面不够好?

注意:

我找到了一些示例,讨论在页面级别执行此操作...

public override void VerifyRenderingInServerForm(Control control)
{
    //Do nothing (we dont care if theres a form or not)
}

...并禁用事件验证,但显然这对我不起作用。

有没有办法在没有干净的“黑客”的情况下做到这一点?

此外:

我甚至尝试创建一个新页面,向其添加一个表单,将我的控件添加到该页面然后在该页面上调用renderControl,我得到了更多错误。

编辑: 我一直在挖掘,我认为这个问题可能与回发有关,因为我发现了这个: http://forums.asp.net/t/1325559.aspx

另一件可能在工作中加入扳手的事情是我使用了ajax工具包,我基本上只需要控件的可见部分,这似乎会因为某种原因而给updatepanel带来一些麻烦。

我猜测上面的示例仅适用于与ajax工具箱无关的基本.net控件。

使问题更加复杂的是,当我点击按钮底部的按钮时,我想让控件处于当前状态......

本质上,控件代表一个预订MOT的表格,我想将表格填写成电子邮件,然后发送到车库,如果这是有道理的。

我想我可能不得不承认在这里失败并且只是从客户端获取标记并手动构建一个电子邮件拉出控制值,因为这似乎是ajax控件和renderControl方法之间的兼容性问题可以告诉(也许你不能以这种方式渲染部分回发兼容的控件)。

除非比我更聪明的人证明可以做到这一点???

1 个答案:

答案 0 :(得分:0)

创建一个ajax控件扩展器并在客户端获取html标记,然后将其发送回服务器进行处理,这有点破解,但似乎涉及ajax控件的任何内容都会导致默认的推荐机制中断。 / p>