我在视图状态中添加了一个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'是 没有标记为可序列化。
答案 0 :(得分:3)
DataList
类不可序列化(尚未设置SerializableAttibute且未实现ISerializable接口)。
这意味着.NET框架无法将其序列化并将其放入ViewState。
由于这是一个内置类,因此无法将其修改为可序列化。
由于DataList预计会包含大量信息,因此将其置于ViewState会导致ViewState变大,这会影响性能,因此不使其可序列化是有意义的。
也许您可以重新考虑放入ViewState所需的信息,只需在其中加入少量信息(例如ID列表)。
答案 1 :(得分:1)
除非它实现了ISerializable,否则不能将对象放在viewstate中。 视图状态在发送到客户端之前已序列化。
您可以以类似的方式使用Session来查看状态,并且对于所有意图和目的,它都可以。会议我认为会更耗费资源。
datalist是你自己的班级吗?如果是这样的话,你也可以实现ISerializable,但如果我只是输入session,我就不会走那条路。