2012-04-03 26 views
0

您好,我有一個小的List<string>,我想在只有一個頁面的回傳中維護。該列表不會包含超過10個項目,每個項目最多40個字符(沒有敏感數據)。ASP.NET webforms維護列表<string>不同回發

我知道類似的問題已被問到,但我在將這個存儲在ViewStateSession之間有點矛盾。我聽說即使是很小的字符串值也會導致ViewState值在很大程度上增加。我想遍歷列表並使用Linq來查詢它,但我會更好使用string[]數組,並且該列表(不起眼的大小)是否可以存儲在ViewState中,還是應該將它存儲在Session?謝謝。

回答

1

如果你不濫用它,在ViewState中存儲東西並不是一個可怕的想法。如果列表很小,並且只在一頁上有意義,那麼就去做吧。

只要記住ViewState可以被篡改,所以如果你不想讓客戶知道它,那麼你是金。否則將其存儲在Session中。

+0

嘿喬希,謝謝你。是否有任何令人信服的理由將其存儲在'Session'中? – maGz 2012-04-03 23:04:07

+0

這可能只是我有意在ViewState中存儲的整個應用程序中的兩件事之一。 – maGz 2012-04-03 23:05:17

+0

@maGz - 僅當您希望它在整個會話中持續存在,或者有權在不同的頁面中訪問它時。我傾向於儘可能避免使用會話,因爲如果您嚴重依賴會話,會使縮放更加困難。就像例如在網絡農場中退回到另一臺服務器一樣。如果只存在一個頁面,那麼ViewState是您最好的選擇。再次,不要濫用它。大ViewState是它自己的邪惡形式。 – Josh 2012-04-03 23:59:38

2

我會更關心這個List<>的範圍。如果它僅限於這一頁,那麼我認爲使用ViewState是完全可以接受的;這正是它的意思。

但是,如果您需要將其保留在多個頁面上,那麼評估SessionCache會更有意義。

我也會記住,如果每個用戶的列表不同,或者它可以在多個用戶之間共享。在那種情況下,我會傾向於Cache

最後,我可能會被忽略掉這一個,但你也可以看看使用SessionPageStatePersister類將ViewState存儲在服務器端內存中的選項。

祝你好運!

+0

所有信息都有助於我的學習,所以我會+1給你!我不需要它在多個頁面上持久保存(事實上,如果數據在其他地方不可用,我寧願使用'Session.Abandon()')清除所有會話變量'OnLoggedOut'。它會改變poer用戶,因爲我基本上想跟蹤用戶上傳的照片的文件名......這是因爲用戶也可以選擇省略他們已經上傳的某些照片,也爲我提供了一種檢查方式如果他們沒有上傳超過10張照片。 – maGz 2012-04-03 23:24:47