在CompleteRequest()之后执行代码

时间:2014-09-24 08:13:29

标签: c# asp.net c#-4.0 threadabortexception

我必须在下载文件后执行更多代码,但它还没有发生。编译器在ClearControls();之后命中DownloadFile();,但该函数未执行。 在页面上,我得到打开或保存文件的提示。但是文本框没有被清除。 在这种情况下应该做些什么。

protected void btnOk_Click(object sender, EventArgs e)
{
//ClearControls(); // not working here too.
DownloadFile();
ClearControls();
}

private void DownloadFile()
{
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition","attachment;filename="+sName+".pdf");
Response.TransmitFile(Server.MapPath("~/documents/ready/" + strPdfName));
//Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}

private void ClearControls()
{
  txtOne.Text="";
  txtTwo.Text="";
}

2 个答案:

答案 0 :(得分:2)

你的下载基本上覆盖了对浏览器的写入,你得到一个回复​​,它是包含所有标题信息的文件。

如果你真的需要在此时更新表单,那你就有点困难了。最好的办法是使用javascript或ajax通过查询字符串传递您需要的值,在新的选项卡或窗口中打开下载。

答案 1 :(得分:1)

这是网页通常会将您发送到另一个下载页面的原因之一,而不是立即开始下载。您需要两个单独的HTTP请求才能提供两个HTTP响应 - 由于您的响应已经是要下载的文件,因此无法发送应包含在原始页面中的响应。