C#如何获取foreach循环所有值 解决.Net Core日历仅显示最后日期问题
问题原因
你当前代码中jsonDate是单个字符串类型变量,foreach循环遍历过程中,每匹配到一个有效日期就会直接覆盖jsonDate的原有值,之前遍历得到的所有日期都会被丢弃,最终传入视图的自然只有最后一条有效日期的序列化结果。
修复方法
不需要在循环中逐个给单变量赋值,先过滤掉空的无效日期,再把整个有效日期集合一次性序列化为JSON数组即可,完全可以省略冗余的foreach遍历赋值逻辑。
修正后的控制器代码:
public IActionResult Calendar() { // 筛选出所有非空的任务完成日期,统一格式化为yyyy-MM-dd字符串 var validDates = _context.Tasks .Where(t => t.DateAllTaskCompleted != null) .Select(t => t.DateAllTaskCompleted.Value.ToString("yyyy-MM-dd")) .ToList(); // 直接将整个日期集合序列化为标准JSON数组 var jsonDate = JsonSerializer.Serialize(validDates); ViewData["Date"] = jsonDate; return View(); }
注意事项
- 前端JavaScript读取
ViewData中的值反序列化后,得到的是包含所有有效日期的数组,直接遍历数组给日历组件绑定对应日期标记即可。 - 不要尝试在循环中用字符串拼接的方式生成JSON,这种写法很容易出现格式错误(比如多余分隔符、引号转义异常),直接序列化集合的写法性能更好、格式也不会出错。
内容的提问来源于stack exchange,提问作者Skullkid_01
相关产品推荐
相关产品推荐

