在 ILIst Razor 中迭代时,对象引用未设置为对象的实例

本文关键字:设置 对象 实例 对象引用 Razor ILIst 迭代 | 更新日期: 2023-09-27 17:56:58

我的Ilist有问题,我无法循环它总是抛出错误 对象引用未设置为对象的实例。这是我的观点..当我调试我的代码时,模型有一个值,但是当它转到foreach时,它说item.pillarofcultureteamlevel未设置。任何帮助

@model P247.Pres.MVC.ViewModel.SummaryTeamLevelViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<html>
<head>
         <title></title>
</head>
<body>
<h2>Index</h2>
@{
var item = Model;
foreach (var pillar in item.pillarofcultureteamlevel)
{
    var js = pillar.JobSecurityAndOverallCompensation;
}
}
</body>
</html>

这是我的控制器

public ActionResult Index()
    {
        _reportservice = new ReportService();
        _pillarofcultureteamlevel  = _reportservice.GetPillarsOfCultureTeamLevel(57);
        _retentiondriverteamlevel = _reportservice.GetRentionDriversTeamLevel(57);
        _employeeteamlevelsummarylist = _reportservice.GetEmployeeTeamLevelSummaryDTO(57);
        summary = new SummaryTeamLevelViewModel(_pillarofcultureteamlevel, _retentiondriverteamlevel, _employeeteamlevelsummarylist);
        return View(summary);
    }

这是我的视图模型

public class SummaryTeamLevelViewModel
{
    private IList<PillarsOfCultureTeamLevelDTO> _pillarofcultureteamlevel;
    private IList<RetentionDriverTeamLevelDTO> _retentiondriverteamlevel;
    private IList<EmployeeTeamLevelSummaryDTO> _employeeteamlevelsummarylist;
    public SummaryTeamLevelViewModel(IList<PillarsOfCultureTeamLevelDTO> pillarofcultureteamlevel,
                                    IList<RetentionDriverTeamLevelDTO> retentiondriverteamlevel,
                                    IList<EmployeeTeamLevelSummaryDTO> employeeteamlevelsummarylist)
    {
        _pillarofcultureteamlevel = pillarofcultureteamlevel;
        _retentiondriverteamlevel = retentiondriverteamlevel;
        _employeeteamlevelsummarylist = employeeteamlevelsummarylist;
    }
    public IList<PillarsOfCultureTeamLevelDTO> pillarofcultureteamlevel { get; set; }
    public IList<RetentionDriverTeamLevelDTO> retentiondriverteamlevel { get; set; }
    public IList<EmployeeTeamLevelSummaryDTO> employeeteamlevelsummarylist { get; set; }
}

在 ILIst Razor 中迭代时,对象引用未设置为对象的实例

你的问题出在SummaryTeamLevelViewModel类上。您有私有字段来存储数据,这是在控制器中调用构造函数后将存储值的位置。但是您的属性不会返回或设置您的私有字段,因为您使用 get; set; 语法而不是显式使用您的私有字段。

您有两种方法可以解决问题:

更改属性,以便它们使用您的私有字段,如下所示:

public IList<PillarsOfCultureTeamLevelDTO> pillarofcultureteamlevel { get { return _pillarofcultureteamlevel; } set { _pillarofcultureteamlevel = value; } }

或者更改构造函数并删除私有字段,以便仅使用属性,如下所示:

public class SummaryTeamLevelViewModel
{
    public SummaryTeamLevelViewModel(IList<PillarsOfCultureTeamLevelDTO> pillarofcultureteamlevel,
                                    IList<RetentionDriverTeamLevelDTO> retentiondriverteamlevel,
                                    IList<EmployeeTeamLevelSummaryDTO> employeeteamlevelsummarylist)
    {
        this.pillarofcultureteamlevel = pillarofcultureteamlevel;
        this.retentiondriverteamlevel = retentiondriverteamlevel;
        this.employeeteamlevelsummarylist = employeeteamlevelsummarylist;
    }
    public IList<PillarsOfCultureTeamLevelDTO> pillarofcultureteamlevel { get; set; }
    public IList<RetentionDriverTeamLevelDTO> retentiondriverteamlevel { get; set; }
    public IList<EmployeeTeamLevelSummaryDTO> employeeteamlevelsummarylist { get; set; }
}