2011-04-30 83 views
5

我有一個簡單的類與一些屬性和其他數據。直到我將可序列化的屬性粘貼到類中,我無法將該類的對象保存到視圖狀態中。爲什麼Viewstate只能包含可序列化的對象?

爲什麼Viewstate只能包含可序列化的對象?

+0

(默認)ASP.NET序列化就是這樣工作的。還有其他序列化識別技術(如DataContracts),但LosFormatter(舊版)和ObjectStateFormatter僅支持Serializable註釋類型。 (雖然,ISerializable也可能工作,但我從來沒有嘗試過) – 2012-12-14 06:10:29

回答

6

作爲請求的視圖狀態被傳遞迴瀏覽器爲嵌入所生成的網頁的HTML中是非常有意義的僅serialisable對象可以被放置在其內(否則它可能無法代表序列化表示它包含的內容)。然後該視圖狀態在下一個請求期間被反序列化。

http://i.msdn.microsoft.com/dynimg/IC152667.gif gives an example of the typical

如果您正在使用POCO的將它們標記爲serialisable應該足夠簡單。有關於如何理解ViewState的工作一個很好的資源,它是什麼等在這裏:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx

它進入狀態的整個生命週期,並給出詳細講述着其大部分執行情況和預期的使用一個開發者。

2

由於ViewState在發送到客戶端之前已序列化。

也許你可以將數據存儲在Session對象中。這取決於你的班級做了什麼以及如何使用它。

+1

+1,但某些會話狀態模式(狀態服務器,sql server)也需要對象可序列化 – davidsleeps 2011-04-30 10:25:37

+0

@davids,你是對的,我的選擇是錯的, – 2011-04-30 14:59:07

2

只是因爲存儲在視圖狀態的數據需要序列化(和反序列化)。

viewstate本質上只是文本,所以存儲在其中的任何東西都需要能夠被表示爲文本,並從該序列化文本重構爲對象形式。

1

我想這概括了答案: 狀態熄滅的療法Asp.Net代碼,不理解你的代碼,這將超出範圍的HTTP處理程序的控制,並且必須在數據存儲序列化(這是當你查看一個asp.net頁面的源代碼時,你會看到很多垃圾),然後在另一個回發需要它時將其還原。

enter image description here

相關問題