2012-08-27 49 views
3

我正在将现有的MVC3应用程序从InProc移动到ASP.Net会话状态服务。 一个模型对象都有这个属性:无法序列化List <SelectListItem>

public List<System.Web.Mvc.SelectListItem> StateCodes { get; set; } 

和它抛出这个错误

无法序列化会话状态。在“StateServer”和 “SQLServer”模式下,ASP.NET将序列化会话状态对象 ,结果不允许不可序列化的对象或MarshalByRef对象为 。如果类似序列化 由自定义会话状态存储以“自定义”模式完成,则适用相同的限制。

有没有办法让List<SelectListItem>序列化?

+1

将这些值复制到一个新列表(例如列表)并将其序列化。 –

+0

可能重复[MVC 3 DropDownListFor:无法找出'System.Web.Mvc.SelectList'无法序列化](http://stackoverflow.com/questions/9214918/mvc-3-dropdownlistfor-cannot-figure-out- system-web-mvc-selectlist-can-be-s) – Liam

回答

5

尝试在剃刀代码中创建选择列表项,而不是使用SelectList。让模型改为SelectList所基于的基础数据的属性。您也可以尝试将SelectList放入ViewBagViewData,这也可以解决问题。

在视图模型中存储SelectList被认为是不好的做法。

+3

为什么它是不好的做法?因为视图模型不应该有关于视图组件的信息? –

2

[只是增加了一些信息,以回答上述]我相信,

存储的SelectList在视图模型被认为是不好的做法。

是由于视图模型不应该以这种特定的方式建立关于如何将信息显示给最终用户的事实。

如果viewmodel有一个项目列表,并且视图呈现一个SelectList当然是好的。但是视图可以选择以其他方式将数据呈现给最终用户。

相关问题