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

Razor Page中For Each循环始终传递首行数据致Next Date计算异常

Razor Page循环渲染时Next Date列固定返回首行计算结果

问题表现

  • 页面基础功能可正常运行,通过For Each循环构建表格渲染Model.Dances_Moderated数据时,除Next Date计算列外,其余列均可随循环迭代正常展示对应行的数值
  • Next Date列遍历多行数据过程中,始终向日期计算函数传递首行数据,导致所有行该列均显示首行计算结果
  • 所用的VB日期计算函数在其他多个VB.Net应用中均可稳定无差错运行,排除函数本身逻辑问题

相关代码片段

页面头部引入配置

@page
@model Moderate.Pages.DanceList.ThisCityModel
@using VB_Stuff.VB_Stuff;

表格循环起始代码

<tbody>
    @foreach (var item in Model.Dances_Moderated)
    {

异常列原有实现

<td>
        @{
            DateStuff obj = new DateStuff();

            string strTodayTomorrow = obj.fTodayTomorrow(Model.Dances_Moderated[0].RecurYesNo, Model.Dances_Moderated[0].SingleDate, Model.Dances_Moderated[0].RecurWeekOfMonth, Model.Dances_Moderated[0].RecurDayOfWeek);

            if (strTodayTomorrow == "")
            {
                string NextEvent = obj.fNextEvent(Model.Dances_Moderated[0].RecurYesNo, Model.Dances_Moderated[0].SingleDate, Model.Dances_Moderated[0].RecurWeekOfMonth, Model.Dances_Moderated[0].RecurDayOfWeek);
                @Html.Raw(NextEvent)
            }
            else
            {
                @Html.Raw(strTodayTomorrow)
            }
        }
    </td>

故障原因

循环内部调用日期计算函数时,没有使用当前迭代的item对象传参,而是硬编码写死了[0]索引固定取集合首行元素,因此每一行渲染时传入函数的永远是第一行的数据,计算结果自然全部和首行一致,和VB函数本身逻辑无关。

修复方法

将所有传参位置的Model.Dances_Moderated[0]替换为当前循环变量item即可,修正后的代码如下:

<td>
        @{
            DateStuff obj = new DateStuff();
            // 使用当前循环迭代的item对象传参
            string strTodayTomorrow = obj.fTodayTomorrow(item.RecurYesNo, item.SingleDate, item.RecurWeekOfMonth, item.RecurDayOfWeek);

            if (strTodayTomorrow == "")
            {
                string NextEvent = obj.fNextEvent(item.RecurYesNo, item.SingleDate, item.RecurWeekOfMonth, item.RecurDayOfWeek);
                @Html.Raw(NextEvent)
            }
            else
            {
                @Html.Raw(strTodayTomorrow)
            }
        }
    </td>

可选优化:如果DateStuff类不依赖单次调用的上下文状态,不需要在循环内重复实例化,可以把DateStuff obj = new DateStuff();提到循环外部,减少不必要的对象创建开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:45:43