2008-09-18 116 views
2

跨回發存儲字符串數據的最佳方式是什麼?我需要爲多個實體存儲一個ID和名稱。我正在考慮在視圖狀態下使用數據表,但這會使視圖狀態變得太大嗎?我還不能使用數據庫,因爲我將插入一條記錄,這些記錄需要與其他記錄相關聯。所以我會暫時存儲它們,直到用戶提交表單。跨回發存儲狀態

回答

4

實際上您有很多選擇 - 您選擇的選項完全取決於您自己的應用程序的要求。

  1. ViewState - 您可以將數據添加到頁面的視圖狀態。這樣做的好處是,數據只在用戶在頁面上的一生中存在並將其發回服務器。它比隱藏字段的另一個優點是用戶難以破解它並改變你的值(我相信,事實上,你可以加密你的視圖狀態)。當然,缺點在於頁面大小 - 您添加到視圖狀態的所有內容都是在用戶頁面上丟棄的內容,然後發送回服務器。這使得它不適合存儲大量數據。

  2. 餅乾 - 您可以將信息以餅乾的形式返回給用戶。在這種情況下,您可以聲明信息的持續時間 - 用戶瀏覽器的範圍或打開特定的日曆時間。每當用戶點擊該頁面時,該信息將可用於應用程序的任何頁面。壞消息是,你可以存儲的信息量有限,用戶可以很容易地改變他們自己的cookies。

  3. 會議 - 你存儲在自己的服務器的內存用戶的信息(我暫時把不同類型的會話存儲的討論)。在這種情況下,只要您的用戶會話處於活動狀態,信息就會存活,並且您的應用程序的所有頁面都可以使用這些信息。用戶不會直接修改這些值,儘管會話劫持是您可能想要探索的風險。它的缺點,不過,是你在這種情況下使用寶貴的服務器資源 - 如果你的應用有一個大的負荷,可能會影響你的可擴展性的未來。

正如我所說 - 你選擇做什麼將完全取決於你的應用程序的需求和要求。

+0

大回答,但我可以要求澄清一件物品嗎?我一直在使用'靜態字符串'來持續回發,但是如果我有兩個不同的用戶同時填寫它們的唯一數據(即名字),他們的記錄會得到相同的名稱,而不是它們的唯一名稱。上述哪一項對每個客戶端來說都是本地化的,並且不受其他客戶端數據的影響仍然存在一些混淆。 Cookies和Session都很好看,但是每個客戶端都有獨特的Cookie?即使他們存儲在「你的服務器自己的內存」中,Sessions對每個客戶端都是唯一的嗎? – FlashTrev 2015-04-01 21:16:26

0

你可以將它們存儲到一個cookie,這將允許你從Javascript訪問它們。或者,您可以將簡單的字符串數組存儲到視圖狀態。很大程度上取決於你希望存儲什麼和多少信息。

1

幾種方法(雖然不是一個詳盡的清單):

  • 的ViewState
  • 隱藏字段
  • 會議
  • 查詢字符串
  • 餅乾
1

的ViewState是罰款。如果您通過回發來存儲它,客戶端解決方案是最好的。所以,你會在某處添加大小 - 無論是在ViewState還是隱藏字段。

如果你想做這個服務器端,你可以使用會話,但記得清理它,當你可以。

0

當我有這種情況下,我創建了我的領域,我塞進視圖狀態的結構。我可以在頁面大小和生命週期中添加一個小的結構,因爲整個頁面的控件集合已經存在:)

此外,在完成頁面之後,它自行清理完畢,因此不必擔心關於用垃圾填充你的Session。

0

我同意accepted answer,但我還想補充一點,如果你只是想跟蹤一個簡單的鍵/值集合,你會得到更好的把一個普通的字典到無論是ViewState中或會議:

Dictionary<int, string> myValues = new Dictionary<int, string>(); 
myValues.Add(1, "Apple"); 
maValues.Add(2, "Pear");