簡體   English   中英

在ASP.NET應用程序中的哪里存儲臨時數據

[英]Where to store temporary data in an ASP.NET application

在我的Web應用程序中,頁面上有許多自定義網格。 我希望用戶能夠編輯每個網格中的數據,然后在過程結束時按一次保存以提交他們的更改。

因此,我需要一個臨時的地方來保留它們的更改,然后再提交。 網格將使用AJAX / Javascript,以便在編輯數據時不強制刷新整個頁面

我可以想到以下用於存儲臨時數據的選項

  1. 隱藏的表單域
  2. ViewState
  3. 屆會

我最不滿意的選項是ViewState選項,因為我已經知道它已在ASP.NET 4.0中逐步淘汰,並且不確定是否可以從AJAX頁面方法訪問ViewState。

我對人們對以上選項的意見以及是否應使用ViewState存儲與開箱即用控件無關的數據感興趣。

ASP.Net 4.0並沒有淘汰ViewState(它對於Web表單的工作非常重要!),只是稍微改變了ViewState的默認工作方式。 你可以在這里閱讀

如果要手動跟蹤數據,則最佳選擇是會話。 但是ViewState旨在自動為您保存此類臨時更改。

ViewState 不會被淘汰,而且永遠不會被淘汰。

但是,很正確,您不能以靜態頁面方法訪問它。

我建議您將數據存儲在會話中。

從服務器端技術來看,會話/緩存是最好的選擇。 會話是特定於用戶的,而緩存是特定於應用程序的,但是您可以使用附加了用戶ID的密鑰在緩存中存儲項目,從而使其成為特定於用戶的會話。

在客戶端,您必須使用隱藏字段來存儲數據,因為JavaScript不了解會話/緩存,並且AJAX請求不一定具有對某些Web資源的訪問權限。 您可以嘗試通過Web請求中的HttpContext.Current訪問這些資源,但是有關該頁面的信息在Web Service調用或PageMethods Web服務調用中將不可用。

我正在使用ViewState,並且效果很好。 會話將導致大量內存消耗,對於我來說,這不是首選的解決方案,而ViewState本質上只是一個隱藏字段,因此只要頁面回發或回調時都可以讀取它。

我的正常流程是:-在頁面加載中:將數據源綁定到網格,將數據源保存到ViewState-在網格上提交:+更新:獲取更新鍵,提取數據源中的數據項並用最新值更新+插入:在數據源中創建一個新的數據項+刪除:使用您的自定義標志標記該數據項已刪除,然后重新綁定網格。 -頁面保存:從ViewState取回數據源,並使用您的標志將其批量插入/更新/刪除到數據庫中

如前所述,將其存儲在會話中,但是請確保在完成后進行清理,僅存儲您真正需要存儲的內容,即,不要在會話中僅丟棄一堆東西,因為這很容易。

我們在應用程序中相當頻繁地使用會話,但請確保自己清理后只保留我們真正需要的內容。 如果將會話用作垃圾場,則會遇到性能問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM