2009-08-07 147 views
4

當我在下載文件後嘗試重定向到新頁面時,它不起作用。我是否必須刪除或修改此代碼中的任何內容?調試犯規達到它下載文件後導向新頁面

byte[] fileData = (byte[])sqlRead[3]; 

Response.Clear(); 
Response.AppendHeader("content-disposition", "attachment; filename=" + sqlRead[2]); 
Response.ContentType = "application/octet-stream"; 
Response.BinaryWrite(fileData); 

Response.Flush(); 
Response.End(); 
Response.Clear(); 

Response.Redirect("Questions.aspx"); 
+0

艾哈邁德,請你讓我知道你是如何解決這個問題的? – 2011-07-07 16:14:52

回答

3

取出

Response.End(); 

Response.End殺死整個響應,沒有後將運行。

終結方法使Web服務器 停止處理腳本並 返回當前的結果。 文件的其餘內容不是 處理。

+0

我刪除它,但現在我得到了這個異常: HTTP標頭髮送後不能重定向 – 2009-08-07 13:41:02

+0

啊,這是真的。由於ASP.NET使用頭來重定向用戶,因此您將無法通過這種方式來使用「Response.Redirect」。我建議你採取史蒂芬的建議(http://stackoverflow.com/questions/1244621/directing-to-a-new-page-after-downloading-a-file/1244705#1244705),並使用JavaScript來重定向用戶。 – 2009-08-07 13:59:15

0

我不是ASP傢伙,但您還需要將任何調用寫入響應主體的任何調用之上的重定向調用。

嘗試把Redirect()電話後Response.Clear()

正確的重定向URL在HTTP響應頭中傳送,因此稱它之後生成的身體(因此已生成的頭和發送)將呈現沒有效果或錯誤。

+0

我已經做了! – 2009-08-07 14:51:50

0

不要使用response.end()/它會突然結束請求處理線程。

+0

當我刪除它,我得到一個異常 – 2009-08-07 14:53:30

3

Andrew對Response.End停止執行是正確的。不過,我認爲刪除它不會有幫助,因爲它只會影響您發送的文件。

你可以用其他技巧得到你想要的效果。例如,您可以在頁面上使用一些JS和DL鏈接來執行客戶端重定向。

編輯

什麼我的建議是,你添加輔助行爲,你的下載鏈接,這樣點擊它都下載文件並改變當前頁面。如果點擊啓動一秒鐘左右重定向的定時器,它可能會更好。

0

你可以嘗試刪除此整個街區:

Response.Flush(); 
Response.End(); 
Response.Clear(); 

我認爲這個問題可能是調用Flush()導致內容被髮送到瀏覽器,所以它是那麼來不及添加重定向當您撥打Redirect()時會添加HTTP標頭。

+0

當我刪除他們全部,重定向工程,但下載不工作! – 2009-08-07 14:40:36