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

ASP.NET中如何在foreach循环中为每个元素获取前一个值?

如何在foreach循环中正确获取每个元素的前一个值

我来帮你排查下问题——你当前的代码逻辑明显走偏了,导致输出全是第一个元素的值。咱们先拆解下核心问题:

先看你视图里的内层for循环:

@for (var i = 0; i < ViewBag.ce.Count - ViewBag.ce.Count + 1; i++) { 
    var previous = ViewBag.ce[i]; 
    @(previous) 
}

这个循环的条件ViewBag.ce.Count - ViewBag.ce.Count +1结果永远是1,所以每次for循环只会执行1次,而且每次都取ViewBag.ce[0]也就是100,这就是为啥后面的输出全是100的原因。

你的需求是:输出原集合的所有元素后,再输出每个元素的前一个值(第一个元素的前一个值用0代替)。那正确的思路应该是分两步处理:

修正后的视图代码

@{
    // 先把ViewBag转成强类型集合,避免动态类型的潜在问题
    var prizeList = ViewBag.ce as List<int>;
}

@* 第一步:输出原集合的所有元素 *@
@foreach (var prize in prizeList)
{
    @prize @:&nbsp;
}

@* 第二步:输出每个元素的前一个值,第一个元素的前一个值设为0 *@
@for (var i = 0; i < prizeList.Count; i++)
{
    var previousValue = i == 0 ? 0 : prizeList[i - 1];
    @previousValue @:&nbsp;
}

额外优化:控制器端的小建议

虽然你的控制器代码能运行,但最好通过强类型ViewModel传递数据(如果项目允许的话),避免ViewBag动态类型的转换风险。如果坚持用ViewBag,视图里转成强类型的步骤是必要的,控制器代码可以保持不变:

var Reward = db.Reward.Where(p => p.Category == 1).Select(p => p.Prize).ToList(); 
ViewBag.ce = Reward;

这样调整后,运行结果就会完全符合你的期望:100 200 300 400 500 600 700 0 100 200 300 400 500 600

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:10:16