0

I have a problem with my Ilist I cant loop through it it always throw an error Object reference not set to an instance of an object.. Here is my view.. When I debug my code the Model has a value but when it goes to the foreach it says that item.pillarofcultureteamlevel is not set.. any help

@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>

Here is my controller

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);
    }

Here is my viewmodel

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; }

}
leppie
  • 109,129
  • 16
  • 185
  • 292
RAM
  • 91
  • 1
  • 10
  • does your `_pillarofcultureteamlevel` variable has a value in your controller? – ppetrov Jan 31 '13 at 05:43
  • Yes it has a value in my controller... – RAM Jan 31 '13 at 05:54
  • Possible duplicate of [What is a NullReferenceException, and how do I fix it?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – tom redfern Jan 11 '17 at 10:26

1 Answers1

1

Your problem is in your SummaryTeamLevelViewModel class. You have private fields to store your data, and that's where your values will be stored after you call your constructor as you do it in the controller. But your properties don't return or set your private fields, because you use the get; set; syntax instead of explicitly using your private fields.

You have 2 ways to solve your problem:

changing your properties so that they use your private fields like that:

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

or changing your constructor and removing your private fields, so that you only use your properties, this would look like that:

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; }

}
ppetrov
  • 3,009
  • 2
  • 13
  • 26