【问题标题】:Execute code after CompleteRequest()在 CompleteRequest() 之后执行代码
【发布时间】:2014-09-24 18:59:15
【问题描述】:

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

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="";
}

【问题讨论】:

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


    【解决方案1】:

    您的下载基本上覆盖了对浏览器的写入,您收到一个响应,它是包含所有标头信息的文件。

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

    【讨论】:

      【解决方案2】:

      这就是为什么网页通常会将您转到不同的页面进行下载,而不是简单地立即开始下载的原因之一。您需要两个单独的 HTTP 请求来提供两个 HTTP 响应 - 由于您的响应已经是要下载的文件,因此无法发送应包含在原始页面中的响应。

      【讨论】:

      • 对。这是我的情况 - 用户填写表格,然后获得下载选项。 fileid 来自 queryString。如果我重定向到另一个页面,那么用户即使不注册也可以直接尝试'download.aspx?id=1...'下载文件。所以,这里有任何其他选择......
      • @Qwerty:嗯,你可以使用几乎任何你想要的身份验证方法,设置 cookie,使用唯一的一次性下载链接......有很多选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2018-08-16
      • 2019-11-29
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多