1

好的,我可以很好地将当前页面内容发送到电子邮件,格式化它有点奇怪,并且最终与预期的有点不同,但我已经掌握了它。

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

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

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

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

    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将是前一页的表单内容(格式化并包含所有用户内容)。

提前致谢!

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

4

2 回答 2

3

如果您知道上一页的所有参数,您可以创建您的页面的一个实例并生成它的 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();
}

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

于 2012-04-23T06:22:26.643 回答
1

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

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

如果数据库过度杀伤,您可以将其存储在会话状态中,然后在使用后将其删除。

于 2012-04-23T05:36:58.417 回答