将datalist添加到viewstate中

时间:2010-01-29 09:18:20

标签: c# asp.net exception serialization

我在视图状态中添加了一个datalist

ViewState["datalist"] = dtlstForm;

并将其检索为:

DataList lis = (DataList)ViewState["datalist"];

然后出现以下错误:

  

在Assembly'System.Web中输入'System.Web.UI.WebControls.DataList',   Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'是   没有标记为可序列化。

2 个答案:

答案 0 :(得分:3)

DataList类不可序列化(尚未设置SerializableAttibute且未实现ISerializable接口)。

这意味着.NET框架无法将其序列化并将其放入ViewState。

由于这是一个内置类,因此无法将其修改为可序列化。

由于DataList预计会包含大量信息,因此将其置于ViewState会导致ViewState变大,这会影响性能,因此不使其可序列化是有意义的。

也许您可以重新考虑放入ViewState所需的信息,只需在其中加入少量信息(例如ID列表)。

答案 1 :(得分:1)

除非它实现了ISerializable,否则不能将对象放在viewstate中。 视图状态在发送到客户端之前已序列化。

您可以以类似的方式使用Session来查看状态,并且对于所有意图和目的,它都可以。会议我认为会更耗费资源。

datalist是你自己的班级吗?如果是这样的话,你也可以实现ISerializable,但如果我只是输入session,我就不会走那条路。