2014-09-24 136 views
0

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

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

你的下载基本上覆盖了写入浏览器,你得到一个响应,它是所有头信息的文件。

如果您确实需要在此时更新表单,那么您有点卡住了。最好的办法是在一个新的标签或窗口中使用javascript或ajax通过querystring传递你需要的值来打开下载。

+0

非常感谢你 – Qwerty 2014-09-24 10:41:56

1

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

+0

没错。这是我的情况 - 用户填写表单,然后获取下载选项。该fileid来自queryString。如果我重定向到另一个页面,则用户可以直接尝试'download.aspx?id = 1 ...'即使没有注册也可以下载文件。所以,在这里的任何其他选项... – Qwerty 2014-09-24 11:43:06

+0

@ Qwerty:那么,你可以使用几乎任何你想要的身份验证方法,设置一个cookie,使用一个唯一的,一次使用的下载链接...有很多选项。 – Luaan 2014-09-24 12:14:18