发送一封电子邮件,其中上一页作为 C# 环境中的内容 asp.net

本文关键字:环境 net asp 一页 电子邮件 | 更新日期: 2023-09-27 18:32:00

好的,我可以将当前页面的内容发送到电子邮件就可以了,格式化它有点奇怪,最终与预期略有不同,但我正在掌握它的窍门。

我目前想做的是在当前页面中发送和访问以前的页面整个格式化表单(我认为这可以通过会话对象完成),然后将其发送到电子邮件。这包括用户输入文本框等(我目前正在通过会话对象跨页面保留 [如果这很重要])。

我试图搜索谷歌和这个网站,但没有真正解决这些问题,其中有几个。

如果有人能指出我正确的方向,将不胜感激。

为清楚起见,以下是我通过电子邮件发送当前页面的过程:

    StringWriter sw = new StringWriter( );
    HtmlTextWriter w = new HtmlTextWriter( sw );
    MAIN.RenderControl( w );
    string s = sw.GetStringBuilder( ).ToString( );
    MailMessage message = new MailMessage( );
    message.IsBodyHtml = true;
    message.To.Add( new MailAddress( Session["eMail"].ToString( ) ) );
    message.Subject = "foo bar";
    message.From = new MailAddress( "email@email.com" );
    message.Body = s; //this would be filled with the previous page

因此,基本上,message.Body将是前一页的表单内容(格式化并包含所有用户内容)。

提前感谢!

编辑:我不是指您当前所在的页面之前的文字上一页,我的意思是进入此页面的过程中的上一页(在我的情况下,它是流程中的第二页,电子邮件将在第四页发送)。

发送一封电子邮件,其中上一页作为 C# 环境中的内容 asp.net

如果您知道上一页给出的所有参数,则可以创建页面的实例并生成其 HTML。

我在这里写了一篇关于它的博客文章:

http://www.diaryofaninja.com/blog/2009/09/14/a-simple-solution-to-viewing-a-preview-of-any-page-in-your-site

基本上,这意味着利用 ASP.Net 运行时并在其生命周期中执行页面 - 如果您的页面具有任何公共属性(例如内容 ID 等),您可以将它们作为其中的一部分进行设置。

Page tempPage = new Views.Blog.BlogDetail();
tempPage.PageIntro = intro;
tempPage.PageContent = content;
StringWriter sw = new StringWriter();
HttpContext.Current.Server.Execute(tempPage, sw, false);
if (!String.IsNullOrEmpty(sw.ToString()))
{
    return sw.ToString();
}

显然,这不是获取上一页,而是重新生成它并获取其内容。

我不会尝试跳过任何箍来获取上一页。 由于您处于某种页面/工作流中,因此建议您存储所需的状态(如果您现在不这样做),然后发送包含正确呈现的状态的电子邮件。

例如:假设上一页有一些评论和评论日期。 然后,您可以将该状态(注释和日期)保存在数据库中,然后在发送电子邮件的下一页中选取它。

如果数据库矫枉过正,则可以将其存储在会话状态中,然后在使用后将其删除。