为什么Viewstate只能包含可序列化的对象?

时间:2011-04-30 10:14:27

标签: c# asp.net

我有一个包含一些属性和其他数据的简单类。直到我将serializable属性粘贴到类中,我无法将类的对象保存到viewstate中。

为什么Viewstate只能包含可序列化的对象?

4 个答案:

答案 0 :(得分:6)

由于请求的视图状态作为嵌入在生成的页面的HTML中的序列化表示传递回浏览器,因此只能将可序列化的对象放在其中(否则它可能无法表示它包含的内容)。然后在下一个请求期间对该视图状态进行反序列化。

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

如果你使用POCO将它们标记为可序列化应该是微不足道的。有一个很好的资源来理解viewstate如何工作,它是什么等等:

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

它进入了状态的整个生命周期,并从开发人员的角度提供了大部分实现和使用的详细信息。

答案 1 :(得分:2)

因为ViewState在发送到客户端之前已被序列化。

也许您可以将数据存储在Session对象中。这取决于你的班级做什么以及如何使用它。

答案 2 :(得分:2)

只是因为存储在viewstate中的数据需要序列化(和反序列化)。

viewstate本质上只是文本,因此存储在其中的任何内容都需要能够表示为文本并从该序列化文本重构为对象形式。

答案 3 :(得分:1)

我认为这总结了答案: 状态失控,从Asp.Net代码到HTTP处理程序,它不理解你的代码将超出范围,并且必须在数据存储区中对其进行序列化(当你查看源代码时,你会发现很多垃圾一个asp.net页面)然后在另一个回发需要它时将其还给它。

enter image description here