首页 / 问答 / ASP.NET Core应用程序,如何在`TempData`临时数据存储器中存储复杂的数据类型(对象)呢?

ASP.NET Core应用程序,如何在`TempData`临时数据存储器中存储复杂的数据类型(对象)呢?

.NET C# .NET Core ASP.NET Core .NET 6 1.79K 次浏览
0

如题,在ASP.NET Core应用程序中,如何在TempData临时数据存储器中存储复杂的数据类型(对象)呢?

比如,在一个控制器中,需要数据模型验证失败后,把失败信息对象存储在TempData["ErrorMessages"]中,如下:

if (!ModelState.IsValid)
{
    TempData["ErrorMessages"] = ModelState;
    return RedirectToAction("Product", "ProductDetails", new { code = model.ProductCode });
}

但在程序运行到此处时,会抛出如下的异常:

‘System.InvalidOperationException The Microsoft.AspNet.Mvc.SessionStateTempDataProvider’ cannot serialize an object of type ‘ModelStateDictionary’ to session state.’

那么,应该如何实现在TempData临时数据存储器中存储复杂的数据类型(对象)呢?

回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    TempData创建静态扩展方法,存储的时候将对象序列化成JSON字符串,读取时反序列化成相应的对象即可,代码示例如下:

    如何使用呢?

    假设objectA是类ClassA的实例对象,现需要将objectA对象存储到TempData中,则可以调用TempData的静态扩展方法:

    读取则调用TempDataGet()方法:

    Rector的个人主页

    Rector

    2022-02-24 回答

    • 0

      如果是在.NET Core 3.1及以上的版本中,还可以使用System.Text.Json来序列化和反序列化,并创建相应的静态扩展方法,示例代码如下:

      Rector的个人主页

      Rector

      2022-02-24 回答

      我来回答