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

ASP.NET Core 5 MVC 视图所有行显示相同值问题求助

问题根因

你在foreach循环外部仅实例化了一次MatchViewModel对象,由于C#中类属于引用类型,每次循环修改的都是同一个对象的属性值,最终retList中存储的9个元素都指向同一个对象实例,所以视图渲染时所有行都会显示最后一次循环赋值的内容。

修复方案

将MatchViewModel的实例化操作移到foreach循环内部,每次循环都创建独立的新实例:

public async Task<IActionResult> ViewAllMatch()
{
    var matchQuery = await _mediator.Send(new GetMatchesDetail());
    List<MatchViewModel> retList = new List<MatchViewModel>();

    foreach (var item in matchQuery)
    {
        // 每次循环新建独立实例
        MatchViewModel matchesvm = new MatchViewModel();
        matchesvm.MatchId = item.MatchId;
        matchesvm.MatchNumber = item.MatchNumber;
        matchesvm.DateMatch = item.DateMatch;
        matchesvm.TimeMatch = item.TimeMatch;
        matchesvm.MatchYear = item.MatchYear;
        matchesvm.SeasonId = item.SeasonId;
        matchesvm.SeasonName = item.SeasonName;
        matchesvm.Round = item.Round;
        matchesvm.Stage = item.Stage;
        matchesvm.SubStage = item.SubStage;
        matchesvm.HTeam = item.HTeam;
        matchesvm.HGoal = item.HGoal;
        matchesvm.HTeamCode = item.HTeamCode;
        matchesvm.GGoal = item.GGoal;
        matchesvm.GTeam = item.GTeam;
        matchesvm.GTeamCode = item.GTeamCode;
        matchesvm.WinNote = item.WinNote;
        matchesvm.Stadium = item.Stadium;
        matchesvm.Referee = item.Referee;
        matchesvm.Visistors = item.Visistors;

        retList.Add(matchesvm);
    }
    
    return View(retList);
}

优化建议

如果实体字段较多,可使用AutoMapper等对象映射库替代手动映射,减少重复代码的同时避免这类低级错误。

内容的提问来源于stack exchange,提问作者Nguyen Tuan Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:15:00