0

我想通过电子邮件发送 aspx 页面。所以我把它转换成pdf。问题是在保存数据之前创建了 pdf。所以当我打开pdf时,我的测试箱是空的。请给我一个解决方案。下面是正在使用的代码。我也想将pdf文件作为附件发送。

     protected void SendMail()
    {

        var userName = "4.n-4@gmail.com";

        var toAddress = YourEmail.Text.ToString();

        const string Password = "Mypassword123#";

        string subject = YourSubject.Text.ToString();
        string body = "From: " + YourName.Text + "\n";
        body += "Email: " + YourEmail.Text + "\n";
        body += "Subject: " + YourSubject.Text + "\n";
        body += "Question: \n" + Comments.Text + "\n";

        var smtp = new System.Net.Mail.SmtpClient();
        {
            smtp.Host = "10.238.52.240";
            smtp.Port = 25;
            smtp.EnableSsl = false;
            smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
            smtp.Credentials = new NetworkCredential(userName, Password);
            smtp.Timeout = 20000;
        }

        smtp.Send(userName, toAddress, subject, body);
    }

     protected void Button1_Click(object sender, EventArgs e)
    {

        Response.ContentType = "application/pdf"; 
        Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); 
        this.Page.RenderControl(hw); 
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); 
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
        pdfDoc.Open(); 
        htmlparser.Parse(sr); 

        Response.Write(pdfDoc);


         try
        {
             SendMail();

            DisplayMessage.Text = "Your Comments after sending the mail";
            DisplayMessage.Visible = true;
            YourSubject.Text = "";
            YourEmail.Text = "";
            YourName.Text = "";
            Comments.Text = "";
            pdfDoc.Close();
            Response.End();
        }
        catch (Exception) { }
    }
        }
      }
4

1 回答 1

0

我不知道您背后的其余代码,但我猜您缺少足够的 PostBack 处理。当您单击提交按钮时,页面首先被发布(即'PostBack' - 重新处理整个页面生命周期,包括Page_Load事件;重新初始化页面),因此当您到达按钮的 Click 事件时之后,表单和您的文本框将为空。

您可以在msdn上阅读 ASP.NET 页面生命周期。

于 2012-09-13T12:47:20.737 回答