2014-09-24 70 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