2011-04-30 107 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

相关问题