You need to enable JavaScript to run this app. C#跨页面正确遍历Session存储的Dictionary实现方法
优惠活动
大模型
产品
解决方案
定价
更多

C#跨页面正确遍历Session存储的Dictionary实现方法

跨页面从Session中取出并遍历存储的Dictionary<string,string>的正确实现方案

问题根因

Session 对所有存储值均以System.Object类型做装箱处理,取值时如果没有执行显式类型转换,拿到的仅为通用object引用,无法被识别为具体的泛型字典类型,也就无法直接执行foreach遍历操作。

正确实现步骤

1. Home.aspx.cs 端字典存储逻辑(基础校验)

确保存入Session的是完整、无空值的*Dictionary<string, string>*实例:

// 初始化泛型字典
Dictionary<string, string> famPlanMembers = new Dictionary<string, string>();
// 按规则添加键值对:用户名作为键、联系手机号作为值
famPlanMembers.Add("第一个成员的用户名", "13800138000");
famPlanMembers.Add("第二个成员的用户名", "13900139000");
// 存入Session指定键下
Session["FamPlanMembersDict"] = famPlanMembers;

2. Home2.aspx.cs 端安全取值与遍历逻辑

取值时必须配合类型判断+显式转换,避免直接硬转换引发的异常,完成转换后即可正常遍历:

// 用模式匹配判断Session值是否为目标字典类型,匹配成功直接生成可用的强类型变量
if (Session["FamPlanMembersDict"] is Dictionary<string, string> membersDictionary)
{
    // 变量已为识别完成的字典类型,可直接执行foreach遍历
    foreach (KeyValuePair<string, string> memberInfo in membersDictionary)
    {
        string currentUserName = memberInfo.Key;
        string currentUserPhone = memberInfo.Value;
        // 在此处编写后续业务处理逻辑
    }
}
else
{
    // 适配Session过期、键值缺失、类型不匹配的异常场景
    // 例如:提示Session失效、跳转回首页等
}

常见踩坑提醒

  • 禁止直接无转换接收Session值:如var membersDictionary = Session["FamPlanMembersDict"];,这类写法拿到的变量类型为object,不具备字典的遍历能力,会触发编译错误。
  • 不建议直接硬转:如Dictionary<string, string> membersDictionary = (Dictionary<string, string>)Session["FamPlanMembersDict"];,这类写法如果遇到Session值为null、类型不匹配的场景,会直接抛出无效转换异常,稳定性差。
  • 若取值判断始终不通过,可排查Session本身的配置问题:比如会话超时时间过短、跨路径Cookie读取异常、Web应用开启了不兼容Session的无Cookie模式等,这类问题和类型转换逻辑无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 03:06:05