如何使用我的自定义控件修复ViewState序列化错误?

时间:2011-02-09 19:39:12

标签: asp.net linq serialization viewstate

我正在编写我的第一个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,并且数据将通过回发持续存在。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果您已将类型标记为可序列化,请尝试将集合保存为List而不是IEnumerable。我猜在IEnumerable接口下是某种LINQ具体的集合类型,它不是可序列化的。