2011-02-01 68 views
1

嗨,ASP.NET MVC2在動作之間保存數據?

我有一個包含一些輸入字段,其中一些領域是常規文件輸入的視圖。提交此視圖表單時,這些文件將被保存在臨時文件夾中。但是如果在服務端檢測到驗證問題,則會返回相同的視圖(用於更新)。問題是文件輸入不會再被填充(安全性),相反,我必須擴展視圖類並顯示存儲文件的小縮略圖,並且還可以刪除(以便能夠上載另一個文件)。

當用戶再次點擊提交時,viewclass將不包含有關存儲文件的任何數據。這是最佳做法?

我自己的想法是下列之一:

  1. 使用隱藏域,但是這將是複雜的,當類存儲是複雜的,它也不會是安全的。
  2. 使用會話來存儲數據,我不知道這是一個好還是壞的解決方案?
  3. 創建一個singelton類(如緩存),其中所有這些數據將被臨時保存。 ASP.NET有一個緩存,你可以設置一個時間直到發佈chache,這可以以同樣的方式工作。
  4. 將廣告臨時保存在數據庫中,這意味着當視圖返回時,它實際上是對已創建廣告的修改,而不是編輯臨時廣告(不在數據庫中)。問題可能在於如果用戶在第一次服務驗證後中止,那麼我們將在數據庫中包含一個不完整的廣告。另一個缺點是,即使廣告從不使用,ID號(身份)也會增加。此解決方案的最後一個問題是廣告表格中將包含不完整的廣告。

普萊斯建議

我的解決方案: 我結束了使用System.Web.Cache的請求之間保持數據。當廣告被創建並接受時,它將從緩存中移除並添加到數據庫中。

+0

關於第3點 - 你仍然可以使用HttpContext.Current.Cache在ASP.NET MVC您在ASP.NET的WebForms用同樣的方式。 – tpeczek 2011-02-01 09:17:57

+0

Grate !,但是第三點會比另一個更好嗎?如果是這樣,爲什麼? – Banshee 2011-02-01 09:32:33

回答

2

您可以使用MVC的TempData功能。基本上TempData是一個會話緩存數據,直到下一個請求。您可以爲每個請求存儲現有文件的列表,並在每次處理表單時將其保存到TempData(並隨後讀取它)? http://jquery.malsup.com/form/

這樣的文件是通過AJAX發送(與使用iframe內部由插件),其中返回一個JsonResult(即您可以執行服務器端:

0

我使用jQuery形式插件解決了這個問題驗證等),並且頁面上的表單實際上保持不變,您可以重新提交而不必再次選擇文件。

注意:如果您使用插件在MVC中返回JsonResult,則需要將JsonResult包裝在「textarea」標記中。看到這個帖子爲包裝JsonResult和梳理了testarea異常類:http://aspzone.com/tech/jquery-file-upload-in-asp-net-mvc-without-using-flash/