You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TempData在同一控制器Action间传递列表失效问题求助

问题根因

ASP.NET Core 中的 TempData 底层默认基于 Cookie 或 Session 实现,要求存储的所有对象必须支持序列化。基础类型(int、string等)默认自带序列化规则,所以直接传递不会报错;而你自定义的Hesabrsee实体类未配置序列化规则,哪怕是空的列表,也无法被TempData默认的序列化器处理,因此触发报错。

最优解决方案

将列表序列化为JSON字符串后存入TempData,读取时再反序列化为对应类型的列表,无需额外配置中间件,兼容性最好:

  • 修改存储逻辑
// 引入System.Text.Json命名空间
TempData["list"] = System.Text.Json.JsonSerializer.Serialize(fraindList.ToList());
  • 修改读取逻辑
public IActionResult PrintReport()
{
    if (TempData["list"] is string listJson)
    {
        List<Hesabrsee> a = System.Text.Json.JsonSerializer.Deserialize<List<Hesabrsee>>(listJson);
        // 此处可正常使用拿到的列表数据
    }
    // 如果你读取后还需要在其他请求中使用该TempData,需要调用Keep方法保留
    TempData.Keep("list");
    return View();
}
额外注意事项
  • 如果Hesabrsee类包含EF Core的导航属性,序列化时可能出现循环引用错误,可配置序列化规则忽略循环引用,或者在序列化前先筛选需要的字段,避免将导航属性加入序列化范围。
  • TempData默认基于Cookie存储时最大容量为4096字节,如果你的列表数据量较大,建议改用Session存储,或者传递查询参数到目标Action后再查询数据库获取列表,避免容量超限报错。

内容的提问来源于stack exchange,提问作者sadegh frisat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:36:00