2011-12-30 80 views
2

我有一個ASP.NET應用程序,在一個點上生成一個PDF文件並加載下一頁。我可以用兩個單獨的按鈕輕鬆做到這一點,但當我試圖用一個按鈕來做這件事時,它變得更加困難。Response.TransmitFile和Server.Transfer

當兩者都被相同的按鈕觸發時,PDF將下載,但頁面將不會加載。我甚至在傳輸文件後讓線程休眠,但它會等待,但之後停止。

我重視,我一直在努力使工作代碼:

Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=labels.pdf"); 
Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf")); 
Server.Transfer("~/createshipment.aspx", true); 
+1

您可以嘗試Response.Write而不是Server.Transfer。你也可以移動到下一頁並初始化。從那裏下載。 – user1231231412 2011-12-30 19:30:41

回答

1

您不能從服務器獲得兩個不同的響應,但您正在嘗試這樣做。

首先 - 您希望服務器返回PDF。 其次 - 您希望服務器返回createshipment.aspx頁面。

這只是針對通信協議。可能最好的解決方案已經由其他用戶提供,competent_tech - 您可以打開一個新窗口(javascript的window.open),這個新窗口將返回PDF,同時主窗口可以發佈到服務器並被重定向到createshipment.aspx

0

這是因爲server.transfer」 ......終止當前頁的執行,並使用指定的開始了新的一頁的執行頁面的URL路徑「。

最好的辦法是在獲取PDF的客戶端打開一個新窗口,然後執行將用戶移動到下一頁所需的任何回傳。

+0

爲什麼它下載文件,睡眠,然後停止加載下一頁。 – 2011-12-30 19:38:21

+0

這似乎很奇怪的行爲。是否有任何異常報告給事件日誌?它幾乎聽起來像是頁面本身有錯誤。您可以查看頁面的來源並查看停止寫入的位置;這可能會給你一個線索。 – 2011-12-30 19:45:39

1

因此,簡而言之,您要導航到下一頁,上面寫着「感謝您下載此文件」並開始下載。

你應該做的是在你的按鈕上點擊你需要生成PDF並將它保存在某個地方(在磁盤或數據庫 - 在你的應用程序中更容易),存儲新文件的名稱/位置(或主鍵DB)在會話變量中並重定向到下一頁。沒有理由在這裏做轉移。然後在下一頁,你應該添加一個隱藏的iframe,指向你保存的文件。

或者,您的按鈕點擊可能只是一個鏈接到下一頁,其中包括一個隱藏的iframe指向生成PDF的頁面。這有點簡單,但如果您需要將參數從原始頁面傳遞到生成PDF的頁面,則效果不佳。

0

我知道這是舊的,但我只是看到它(我自己尋找類似的信息)。

我要去猜測,這是造成問題:

Response.TransmitFile(Server.MapPath("~/"+randomNumber.ToString()+".pdf")); 

您需要的路徑映射到實際的文件,而不是一些隨機生成的文件名 - 還是我失去了一些措施?

+0

這確實不是問題。該文件正在代碼中早些時候創建。 randomNumber在範圍內返回相同的數字,有時超出範圍。 – 2013-02-16 16:19:32