我正在尝试使用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));
}
如何解决此错误?
答案 0 :(得分:2)
您需要将要序列化的类标记为[Serializable]
(并确保它是...)。那就是obj.getlist
类返回的结果。
如果obj.getlist()
返回一个List<MyClass>
,则MyClass
需要应用该属性
TempData在后台使用会话,如果您使用的是远程/共享会话状态(例如Redis或SqlServer),则存储在会话中的所有项目都必须标记为这样。