如何使用我的自定义控件修复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具体集合类型。

+0

这是一个简单的答案,它的工作原理! :-D – 2011-02-09 20:53:21