【发布时间】:2009-09-10 03:04:34
【问题描述】:
我有一个应用程序,它由 10 多个相关的 ascx 文件组成,我们使用 Html.RenderPartial 帮助器在用户浏览器上显示我们的数据。
我需要通过电子邮件发送与屏幕上重复的数据。我希望能够获得生成的 html 而无需进行屏幕抓取。
对于如何做到这一点有什么建议吗?我只是想避免重复工作。
【问题讨论】:
标签: asp.net asp.net-mvc
我有一个应用程序,它由 10 多个相关的 ascx 文件组成,我们使用 Html.RenderPartial 帮助器在用户浏览器上显示我们的数据。
我需要通过电子邮件发送与屏幕上重复的数据。我希望能够获得生成的 html 而无需进行屏幕抓取。
对于如何做到这一点有什么建议吗?我只是想避免重复工作。
【问题讨论】:
标签: asp.net asp.net-mvc
http://www.brightmix.com/blog/renderpartial-to-string-in-asp-net-mvc/ 有一个很好的解决方案,可以将视图呈现为字符串,以便您可以通过电子邮件发送。
/// Static Method to render string - put somewhere of your choosing
public static string RenderPartialToString(string controlName, object viewData)
{
ViewDataDictionary vd = new ViewDataDictionary(viewData);
ViewPage vp = new ViewPage { ViewData = vd };
Control control = vp.LoadControl(controlName);
vp.Controls.Add(control);
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter tw = new HtmlTextWriter(sw))
{
vp.RenderControl(tw);
}
}
return sb.ToString();
}
【讨论】:
在常规的 asp.net 中,您可以覆盖 Render() 并提供自己的 HtmlWriter 来拦截呈现的 html,然后再将其复制到传入的 HtmlWriter。
我不知道你会如何在 MVC 中拦截它,但我相信你能够做到 - 特别是如果你在管道中创建一个新的 HttpModule 来预后处理输出流。
【讨论】: