在我的操作中使用TempData时发生序列化错误

时间:2019-01-10 13:49:37

标签: asp.net-mvc

我正在尝试使用tempdata将数据传递给另一个操作方法,但是在呈现页面时会发生以下错误:

  

无法序列化会话状态。在“ StateServer”中,   'SQLServer'       模式下,ASP.NET将序列化会话状态对象,因此       不允许使用不可序列化的对象或MarshalByRef对象。的       如果定制程序执行了类似的序列化,则存在相同的限制       会话状态以“自定义”模式存储。

这是我的初步行动

 public ActionResult Request(string id)
 {
     viewmodelservice = obj = new viewmodelservice ();
     obj.list = getlist(); 
     TempData["VmList"] = obj.list;
     return View(requestBackUpScheduleVMViewModelObj);
 }

这是我从TempData中检索值的附加操作

 public ActionResult getRequest(string id,[DataSourceRequest] DataSourceRequest request)
 {
     viewmodelservice = obj = new viewmodelservice ();
     obj = (viewmodelservice )TempData["VmList"]
     return json(obj.ToDataSourceResult(request));
 }

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

您需要将要序列化的类标记为[Serializable](并确保它是...)。那就是obj.getlist类返回的结果。

如果obj.getlist()返回一个List<MyClass>,则MyClass需要应用该属性

TempData在后台使用会话,如果您使用的是远程/共享会话状态(例如Redis或SqlServer),则存储在会话中的所有项目都必须标记为这样。