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

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

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

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

http://i.msdn.microsoft.com/dynimg/IC152667.gif给出了一个典型的例子

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

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

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

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

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

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

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

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

在此处输入图像描述