2011-09-16 23 views
1

我使用asp.net服務器控件,並且不希望存儲在可怕的和佔用視圖狀態的服務器控件屬性存儲服務器控件的屬性。所以我需要c#中的一些數據結構來存儲這些屬性並將它們序列化到客戶端隱藏狀態。有人完成了一項研究,其中會給我最好的性能,刪除多餘的密鑰,並提供簡單的序列化/反序列化過程,也提供了被篡改的安全性。對於這種情況,SessionState不是一個好選擇,對於那些想要這樣做的人Lightwieght序列化和解析友好的數據結構

回答

2

你說你要存儲在客戶端隱藏狀態的數據。 ViewState正是如此:我認爲微軟將其設計得非常緊湊。什麼讓你覺得你可以做得更好?

恕我直言,沒有銀彈,如果你想存儲狀態的客戶端,堅持ViewState中。

+0

我同意,但一些初步測試表明,向viestate添加單個字符會導致隱藏字段累計多達10個字符,該帶寬如何友好地說。此外,爲什麼不序列化'名單'這是我的財產,以JSON格式,並存儲在隱藏字段,檢索它當時 – Deeptechtons

+1

@Deeptechtons,你要記住,當你存儲在ViewState中的數據的一個字符,它也需要存儲元數據來描述該字符代表什麼。通過選擇哪些控件啓用ViewState,通常可以實現可接受的頁面大小。任何自行開發的解決方案可能不太安全並且維護性較差 - ViewState由一些聰明的工程師設計。 – Joe

+0

同意100%,OP正試圖在這裏重新發明輪子。如果你對viewstate的大小不滿意,可能是因爲你沒有正確調整它。這篇文章對我很有幫助:http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx – pseudocoder

0

您可以定義一個簡單的類,將該實例序列化爲二進制文件,並對該二進制文件執行Base64編碼並將其用於隱藏字段。如果你想防止篡改,我會建議包含另一個隱藏字段,其中包含由序列化數據構建的散列和可以保留在服務器端的密鑰。然後,您可以在表單帖子上再次構造相同的密鑰,並與您在隱藏字段中收到的密鑰進行比較。

+0

我肯定有一個內置的數據結構的方式比我創建這個類的更多更快。因爲它基本上只是鑽取字符串 – Deeptechtons

+0

也許你可以使用'List '。你幾乎可以使用上面的方法標記爲「Serializable」的任何內置數據類型。 –