2008-10-08 50 views
3

在我的ASP.Net應用程序中,我有一個要求,當用戶點擊一個UI元素時,我們生成一個PDF文件供他們下載。目前這是通過在ashx頁面上發佈表單來實現的。本頁面主要檢查表單,然後執行正確的服務器端頁面,該頁面可以生成HTML或HTML頁面的PDF文檔。請稍候對話框並在asp.net中下載文件

在我事先知道,如果我們要得到一個PDF或HTML客戶端,當它的HTML我打開一個新的窗口,直接表單提交到該窗口,一切運作良好。當它的PDF不改變表單的目標並且它保留在當前頁面上。

這樣做,用戶會看到保存對話框,並且當前頁面不會更改或丟失。

我遇到的問題是生成PDF需要1-15秒。我想要做的是彈出一個請等待對話框。顯示彈出窗口很簡單,我不知道怎麼知道關閉彈出窗口?彈出窗口將是當前頁面中的一個div。

+0

另一個問題是有可能使用ajax方法讓瀏覽器看到內容類型並正確處理它? – JoshBerke 2008-10-08 15:25:59

回答

3

彈出窗口可以有一個客戶端計時器輪詢服務器的任務完成。長時間運行的服務器任務應更新數據庫表或服務器緩存對象的進度,該服務器緩存對象可由輪詢服務訪問。

來自MSDN雜誌的幾篇舊文章。你應該能夠使用像asp.net Ajax這樣的新庫來使用相同的概念。

Reporting Task Progress With ASP.NET 2.0

Simplify Task Progress with ASP.NET "Atlas"

+0

這是最好的選擇,因爲任務不長,但我不喜歡用戶保存文件的想法,然後看到彈出窗口仍然存在。這個技巧就變成了一個很好的區間值。我必須每隔幾秒就測量一下這個效果的影響。 謝謝 – JoshBerke 2008-10-08 15:27:44

0

只是在客戶端上一些javascript,讓它表現出一些GIF動畫1-15秒(你的選擇),並在指定的時間後關閉本身。

-1

你說:

當它的一個PDF,我不改變 目標的形式和它保持在 當前頁面。

如果是這種情況,那麼在打開PDF時原始頁面將會消失。在這種情況下,我將加載一個動畫gif,並使用Javascript將其打開,將其放在覆蓋頁面其餘部分的div標籤中。你不需要關閉它,所以不需要定時器或輪詢。當頁面消失後,它就會消失。

+0

實際上即使打開它,頁面也不會改變。我期望你描述的行爲,但這在IE6,7和Firefox中都有效,目前正在生產中。 – JoshBerke 2008-10-08 15:16:41

0

古爾薩的建議很有用。我有一個簡單的啓用ajax的wcf服務,它檢查會話變量。我的ashx頁面在開始處理時將變量設置爲false,並在完成時設置爲true。

我認爲如果客戶端在將會話項設置爲false之前進行檢查,可能會出現競爭狀況;然而,如果我們修改服務以在客戶端獲得im完成響應之後將會話項目設置爲false,那麼有辦法。

這些技巧仍然是要弄清楚客戶應該是什麼間隔。如果我們將其設置爲低,用戶可以保存文件,然後看到仍在處理的消息。我在半秒到一秒之間辯論自己。不到半秒的時間似乎是不安全的。