2009-02-10 64 views
3

我正在開發一個非常小的調查應用程序,可能3-4頁的Web應用程序。所以我的問題是保存調查數據的最佳方式是什麼?存儲調查數據的最佳方式?

到目前爲止,我已經想出了以下方法。

  1. 保存到數據庫並將每個調查標記爲不完整。當用戶提交調查檢查的最後一個形式時,完成調查並在完成後將其標記爲完整。

  2. 保存到會話並保存到數據庫中,當用戶提交最後一種調查形式時。

您對這些方法有什麼看法?

回答

3

我已經有這種事情相當頭疼,並建議不要使用會話,如果可能的話。當您的網站獲得適度的流量時,或者ASP.NET感覺如此時,您可能會發現當.NET嘗試釋放一些內存時,您會失去所有會話。

我會盡快把它放在數據庫中。使用Guid.NewGuid()來生成一個唯一的不可猜測的關鍵字,您可以在查詢字符串中從一個頁面傳遞到另一個頁面:這將是您從數據庫中檢索記錄的關鍵。你有沒有考慮過

其他兩個選項:

  1. 帖子從一個頁面到下的響應。 (這可能比它的價值更麻煩。)

  2. 使用asp:嚮導控件。這樣,您的3-4頁實際上將在單個頁面上進行3-4步。來自每個階段的數據會自動存儲在ViewState中,因此當您處於最後一步時,第一步中的輸入字段仍然可供您訪問。

(我還是會去爲你選擇1號雖然)。

+0

我會選擇第一個選項,因爲它比會話更強大。 guid(唯一標識符)好主意,我會在表格中添加guid,因爲它將完全消除會話的需要。 謝謝 – Mohamed 2009-02-11 00:16:46

0

如果您希望他們能夠在調查中途保存結果並在另一次回來完成調查,那麼您必須存儲調查的開始時間和結束時間以瞭解他們完成了它。到目前爲止,您還必須存儲所有的值。

由於它很小,我只是將它保留在會話中,然後在完成後將其保存到數據庫中。

0

我認爲第二個選擇是你最好的選擇。如果您的網站收到大量流量,選項1將給數據庫帶來更多壓力,並且還會通過不完整的調查來混淆數據庫。會話聽起來是一個更好的選擇,因爲真的,除非它完整,否則不需要數據,是嗎?

0

兩者看起來都很好,這取決於您希望用戶做什麼或您希望用戶的行爲。

第一種方法將允許用戶返回(即使在關閉瀏覽器後)以完成調查。如果你的調查很大並且用戶在其他事情丟失之前無法完成,那麼這是一個很好的觀點,但是如果你想強制用戶完成,這也是一個負面的問題,我的意思是,如果你不想完成調查。

第二種方法強制用戶在開始的同時完成調查。如果您的調查很快並且您需要有關他們的完整數據,這是一個很好的觀點,但如果您的調查很長,並且通常在用戶完成調查之前分散注意力,這很不好。

我會說,每個頁面的問題數量將是定義在兩種方法之間進行選擇的因素,也許它也適用於您。

2

不要爲此使用會話。微軟有一個很好的例子,說明如何不在TechEd使用的應用程序中進行調查。每次你必須考慮答案時,會議都會超時。使用ajax,保存每個答案,甚至是部分答案。如果遇到數據庫性能問題,請在一定時間內收集所有調查的所有答案,並將其保存在一起。 對於某些JavaScript,只有在過去幾秒內或在窗口關閉之前發生了某些變化時,纔可以對服務器執行回調。

除非你有回答問題的時間限制。

2

如果您預計您的應用程序將來可能會增長(提供更長時間的調查,甚至可能以用戶之間「相同」的結果和稍後恢復的形式),我肯定會與數據庫選項。

1

這是我如何做到這一點:

  • 我產生從數據庫中「問題」,從而只存在一個用來顯示不同的問題頁面。
  • 只要用戶點擊「下一步」,我就會保存每個問題的答案。這具有很大的優勢,即用戶可以回來並從她離開的地方開始。
  • 我使用與保存結果一起更新的指針跟蹤進度。
  • 我不會使用會話,因爲我不想冒數據丟失的風險,也不想讓內存緊張。
  • 當指針==問題的數量時,標記爲完成。