2015-02-08 27 views
0

我的程序:使用.NET MVC3創建,然後下載文件

  1. 從我的網站上收集信息。 (jquery)
  2. 將數據發送到服務器。 (Ajax文章)
  3. 服務器將數據組裝到文檔中。 (請參閱下面的.NET代碼)
  4. 自動下載文檔。 (文件對話框是確定或一些其他)(參見下面的.NET代碼)

Jquery的能夠容易地進行步驟1。然而,如果我在步驟1中使用jQuery然後我感到鎖定到一個Ajax交對於步驟2。意義(據我所知)步驟3和步驟4需要是不同的控制器操作。在這種情況下,在步驟3中彙編的文檔需要以某種方式轉移到步驟4.我打算文檔是臨時的,所以我不贊成將數據保存到數據庫。此外,會話存儲在我的模型等複雜數據類型中很流行。

我放在一起看起來執行1,2和3的代碼,但是,似乎沒有辦法輕鬆地在3和4之間傳輸數據。該文件是臨時的,所以我並不真的想要將其存儲在數據庫中。我更喜歡某種類型的臨時服務器端存儲。

所以我的問題: 1.除了ajax post之外,還有其他一些選項可以讓大量的文本數據(比我想要的更多)到達服務器嗎? 2.如果需要兩個控制器方法(一個用於組裝文檔,另一個用於下載)如何暫時「保存」服務器上的數據?我不想在我的複雜對象使用一個數據庫和會話梁木..

謝謝, 馬特

DotNetCode組裝文件:

[HttpPost] 
public ActionResult FinalText(UserModel model) 
{ 
    byte[] result = buildDocumentFromModel(model); 
    return "success"; 
} 

DotnetCode回報文件:

[HttpGet] 
public FileResult FinalText(int documentId) 
{ 
    byte[] result = getDocument(i); 
    return File(result, "application/pdf", Server.UrlEncode("test.pdf")); 
} 

回答

1

該問題可以通過常規表單提交來解決。

步驟如下:

  1. 定義常規形式輸入和提交按鈕
  2. 接受 的usermodel,構建文檔並將其作爲文件的結果(而不是
  3. 定義ASP.NET操作方法字符串「成功」)。

當窗體被髮送並且服務器響應文件下載瀏覽器並自動顯示保存對話框而不干擾現有頁面的顯示和行爲(無重載)時,Ajax並不需要。

但是,如果要使用ajax調用和兩個ASP.NET操作(如問題所示)實現所描述的行爲,可以將生成的文檔作爲序列化字符串存儲在會話中,並在需要時將其反序列化爲字節數組。

我會推薦第一種方法。