2013-04-06 62 views
2

我正在使用MVC 3.我在服務器上的Action Method(稱爲GetCSV())中創建了一個csv文件。這是一個[HttpPost]操作方法。我想要做的是將該csv文件作爲可下載文件直接發送到網絡瀏覽器。我得到這個使用window.open(),然而,這是一個本質上的GET方法,我需要使用POST的東西,因爲我需要傳遞很多參數。理想情況下,我想使用Ajax,因爲我可以使用這種方法輕鬆地將大量參數傳回服務器。關於如何使用Ajax調用將參數傳遞給服務器,然後以某種方式將響應打開爲可下載文件的任何想法?我會很感激任何建議!如何將Ajax響應作爲可下載文件發送到Web瀏覽器客戶端?

+0

難道你不能返回一個路徑? – aIKid 2013-04-06 23:24:33

+0

好吧,我實際上並沒有將csv保存在服務器磁盤上。它全部在服務器內存中生成。最後,我想這樣做,因爲保存到磁盤將使其更具可擴展性,但現在它正在內存中完成。 – TheDude 2013-04-06 23:31:16

回答

1

我的解決方案是使用Microsoft的MVC 3 Ajax Form而不是JQuery的Ajax。幾個月前,我偶然發現,如果您沒有爲MVC Ajax表單指定「成功」函數,它只是將文件發送到Web客戶端進行下載。這是我需要發生的事情。我試過了,它的確按照預期工作。

0

無法使用JavaScript(至少以所有瀏覽器支持的標準方式)或ajax將文件保存到本地文件系統。這就是爲什麼推薦的方法是不使用ajax,通常是通過GET。

然而,您可以通過jquery的.param()將帶有參數的json對象轉換爲URL,如this answer所示。

如果您確實想要探索javascript替代方案,也許您可​​以查看僅支持鉻AFAIK的FileSystem API

+0

幾個月前,我發現純粹的意外,如果你沒有指定一個「成功」函數來捕獲Ajax響應,那麼不顯眼的Ajax(內置於mvc 3)直接發送json文件到頁面供下載。我會在星期一試一試,讓你們知道它是否有效。當然,除非有人在此之前嘗試過。 ;) – TheDude 2013-04-07 03:19:27

相關問題