2013-12-19 66 views
1

爲了保留表單帖子和頁面請求之間的模型信息,我定義了我用作'靜態'的模型,所以我不會丟失模型的信息。在ASP.NET MVC中保留表單帖子和頁面請求之間的'模型'

比方說,我有3個步驟的行動。第一步,我讓用戶選擇Excel文件。第二步,我創建一個DataSet並附加到我的模型。第三步,我驗證用戶輸入並根據DataSet更新我的DbContext。所有這些步驟都需要表單發佈。 (在動作結束時,我放棄DataSet釋放資源,但無法確定用戶是否取消了操作,因此DataSet對象將保留在內存中。)

所以我的問題是,讓我的這種模式如同靜態模式,對於服務器上的內存分配有效嗎?或者你會建議一個更好的選擇?

+1

您可以使用Session保存模型....告訴我您是否需要示例 – Ofear

+1

通過多個請求保留靜態模型會導致每個用戶具有相同的模型。我確定那不是你想要的。 –

+0

@HenkMollema此操作需要管理員權限,整個站點將有一個管理員。所以我沒有考慮多次訪問,但你是正確的。當涉及到2個或更多管理員時,'靜態'會造成很多麻煩。謝謝你指出。 – mnyarar

回答

2

聽起來像一個壞主意。首先,如果多個用戶同時使用此靜態模型,那麼您的模型將不會爲每個用戶保持一致。有3個地方,你通常把你的狀態:

  1. 其寫入形式隱藏字段,你可以再次回發 - 這不會真正爲您的Excel文件的工作,但可能會持續下去的其他有用你的模型的狀態。

  2. 寫入會話狀態。對於您的excel文件,您可能需要寫入文件系統,然後將文件名存儲在會話狀態中。

  3. 寫入數據庫。你可以把你的excel文件放在數據庫中,或者把你的excel文件放到文件系統中,並在數據庫中存儲文件的路徑。一旦用戶經過第三步,您可以設置一個標誌來保存該數據,或者將其移動到另一個表格。而且您可以定期運行一項作業,清理用戶沒有進入第三步的數據。

+0

我已經在控制器中使用Session對象來保持Ajax進度,爲什麼不使用Session?好主意。只是,我必須創建2次DataSet,這是我想避免的。因爲在第二步中,我讓用戶選擇他/她將使用哪個表以及哪些列將被更新。在第三步中,我會根據第二步中的設置更新DbContext。無論如何,創建DataSet 2次比使用靜態的荒謬。感謝您的貢獻。 – mnyarar

相關問題