Reputation: 91
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; }
}
Upvotes: 0
Views: 1582
Reputation: 3105
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; }
}
Upvotes: 1