2012-08-27 144 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當然是好的。但是視圖可以選擇以其他方式將數據呈現給最終用戶。

相關問題