2013-04-25 48 views
0

我在服務器上生成一個大的csv文件,並在mvc4中返回它,這大約需要30秒。 我想顯示一個加載消息給用戶,但因爲我不能使用ajax下載文件我不知道我該怎麼做。如果文件不能生成,即沒有相關的數據用於生成文件我希望能夠返回一條消息出現在同一頁面,我不想刷新頁面或返回錯誤代碼。這可能嗎?如何在使用mvc4中的filecontentresult時顯示加載消息和錯誤消息?

+1

請確保您的操作返回您的文件下載正在返回一個ActionResult。不要試圖將其縮小到FileContentResult,這樣,如果流程失敗,您仍然可以選擇返回帶有錯誤詳細信息或JSON的頁面。 – 2013-04-25 19:45:09

+0

如何在不發出ajax請求的情況下獲取jsonresult? – Xerxes 2013-04-25 19:58:26

+0

啊,你說得對。在這種情況下,我不應該包含JSON作爲選項。然而,它仍然是一個有效的關注點,通過將返回類型保留爲ActionResult,您可以自由返回FileResult或ViewResult。 – 2013-04-25 20:49:59

回答

1

而不是直接使用FileContentResult到最終瀏覽器,我會返回一個標準的視圖,告訴用戶該文件正在生成。然後將一個AJAX POST發送到服務器,觸發文件生成並將結果保存到服務器。服務器生成文件後,通知用戶它可以下載,或讓瀏覽器導航到文件下載。

0

當操作嘗試返回響應時,您無法生成加載消息,因爲瀏覽器在該點沒有活動視圖。處理這個問題的最好方法是用AJAX創建一個工作(例如,調用一個URL,它將在一個單獨的線程或進程中開始創建CSV文件並返回某種標識符)。然後,您可以每隔一段時間輪詢一次獲取當前狀態或使用SignalR和HTML5 Web套接字等通知用戶狀態。當文件創建完成時,向用戶提供一個鏈接到完成的文件。