首页 > 解决方案 > 如何将用户控件的输出呈现为后台作业中的字符串

问题描述

我正在尝试将用户控件的输出转换为字符串,以便通过电子邮件发送。如果我从 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);  

有什么方法可以完成这项工作,或者是否有不同/更好的方法来获取指定页面的输出并发送电子邮件?

标签: c#asp.nethangfire

解决方案


我最终创建了一个页面,该页面将加载指定的控件并通过电子邮件发送。我使用 Webclient 从 HangFire 调用该页面。丑陋的解决方法,但它的工作原理。


推荐阅读