我正在编写我的第一个asp.net用户控件。
显示用户可从中选择的位置列表。我可以将一个位置列表加载到控件中,我可以看到用户在页面回发时选择了哪个位置,但是当页面回发时列表本身就会丢失。
我使用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
,并且数据将通过回发持续存在。
我该如何解决这个问题?
答案 0 :(得分:3)
如果您已将类型标记为可序列化,请尝试将集合保存为List而不是IEnumerable。我猜在IEnumerable接口下是某种LINQ具体的集合类型,它不是可序列化的。