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
相关产品推荐
相关产品推荐

