c# - 如何将用户控件的输出呈现为后台作业中的字符串
问题描述
我正在尝试将用户控件的输出转换为字符串,以便通过电子邮件发送。如果我从 ASP.Net 页面调用它,它可以工作,但在通过 HangFire 从后台作业调用时不起作用。这是被调用的函数:
public static string EmailReport(string strControl)
{
UserControl userControl = (UserControl)((Page)HttpContext.Current.Handler).LoadControl(strControl);
string smtpBody = userControl.RenderHtml().ToString();
}
public static class UserControlExtensions
{
public static string RenderHtml(this UserControl control)
{
using (var sw = new StringWriter())
{
var page = new Page();
page.Controls.Add(control);
HttpContext.Current.Server.Execute(page, sw, false);
return sw.ToString();
}
}
}
如果我EmailReport
从 .aspx 页面后面的代码调用,它工作正常。但是,当通过 hangfire/startup.cs 从后台作业调用它时,我得到
你调用的对象是空的。
在这条线上:
UserControl userControl = (UserControl)((Page)HttpContext.Current.Handler).LoadControl(strControl);
有什么方法可以完成这项工作,或者是否有不同/更好的方法来获取指定页面的输出并发送电子邮件?
解决方案
我最终创建了一个页面,该页面将加载指定的控件并通过电子邮件发送。我使用 Webclient 从 HangFire 调用该页面。丑陋的解决方法,但它的工作原理。
推荐阅读
- udp - IPVS(keepalived)不平衡 UDP 连接
- mongodb - Zeppelin 无法使用 spark 解释器加载 mongodb 集合
- c# - 如何确定 docker 容器端口号?
- aggregate - 哪个是在 DDD 中分离聚合的最佳方法
- javascript - 无序列表中的列表项仅在 Internet Explorer 中重叠,在所有其他浏览器中一切正常
- angular6 - 删除 BpmnJs 符号
- c# - Angular 6中的发布方法不发送数据
- sapui5 - SAP Fiori MyInbox 单机版无法正常工作?
- powershell - PowerShell 脚本无法执行 - ServiceFabric
- python - import cv2 ImportError: DLL load failed: %1 不是有效的 Win32 应用程序