如何使用我的自定义控件修复ViewState序列化错误?
问题描述:
我正在写我的第一个asp.net用户控件。如何使用我的自定义控件修复ViewState序列化错误?
它显示用户可以从中选择的位置列表。我可以在控件中加载位置列表,并且我可以看到用户在页面回传时选择的位置,但是当页面回传时列表本身会丢失。
我使用IEnumerable<DetailedLocation>
类型的对象填充列表,其中DetailedLocation
是一个包含多个string
字段的类。当我尝试把列表转换成ViewState中,我得到以下错误:
Type 'System.Linq.OrderedEnumerable`2
[[DetailedLocation, AT.Common, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null],[System.String, mscorlib, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089]]' in Assembly 'System.Core,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not
marked as serializable.
当然,我喜欢的类型可以被标记为可序列,但此错误信息仍然存在。我知道必须有可能以某种方式完成这项工作。毕竟,我可以将这种类型的对象传递给GridView
,并且数据将通过回发持续存在。
我该如何解决这个问题?
答
如果您已将您的类型标记为可序列化,请尝试将集合保存为List而不是IEnumerable。我猜在IEnumerable接口下是某种不可序列化的LINQ具体集合类型。
这是一个简单的答案,它的工作原理! :-D – 2011-02-09 20:53:21