我想通过电子邮件发送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) { }
}
}
}
答案 0 :(得分:0)
我不知道你的其余代码背后,但我猜你错过了足够的PostBack处理。当您单击“提交”按钮时,首先发布该页面(即“PostBack” - 重新处理整个页面生命周期,包括Page_Load
事件;重新初始化页面),因此当您到达时之后,在按钮的Click事件中,表单和文本框将为空。
您可以在msdn上阅读ASP.NET页面生命周期。