/ / Изключение NullReferenceException в контролера (asp.net mvc) - asp.net-mvc, asp.net-mvc-4

Изключение NullReferenceException в контролера (asp.net mvc) - asp.net-mvc, asp.net-mvc-4

В моя проект има модел на модел на доставчик и потребител, всеки доставчик има няколко потребители
Модел на доставчика

public class SupplierRow
{
public Guid Id { get; set; }
public string FullName { get; set; }
public bool Subscribed { get; set; }
public bool Active { get; set; }
public int Visits { get; set; }

public List<UserRow> Users { get; set; }

public bool AllInactive
{
get
{
foreach (UserRow ur in Users)
{
if (ur.Status == 1) return false;
}
return true;
}
}
}

и потребителски модел

public class UserRow
{
public Guid Id { get; set; }
public string FullName { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Status { get; set; }
public int Role { get; set; }

public Guid SupplierId { get; set; }
}

тогава използвам моите модели в контролера

 public ActionResult Grid(bool? active)
{
var suppliers = Context.Suppliers.AsNoTracking()
.WhereIf(active != null, e => e.Active == active)
.Select(e => new SupplierRow
{
Id = e.Id,
FullName = e.FullName,
Active = e.Active,
Visits = e.Visits,
})
.ToList();


List<Guid> supplierIds = new List<Guid>();
foreach (SupplierRow sr in suppliers)
{
supplierIds.Add(sr.Id);
}

var users = Context.Users.AsNoTracking()
.Where(e => supplierIds.Contains(e.SupplierId.Value))
.Select(e => new UserRow
{
Id = e.Id,
FullName = e.FullName,
Email = e.Email,
Name = e.Name,
Status = e.Status,
Role = e.Role,
SupplierId = e.SupplierId.Value
}).ToList();


foreach (UserRow ur in users)
{
foreach (SupplierRow sr in suppliers)
{
if (ur.SupplierId == sr.Id)
{
sr.Users.Add(ur);
}
}
}

return PartialView("_Grid", suppliers);
}

но когато се опитам да отстранявам моя проект, имам изключение тук въведете описанието на изображението тук Какво е грешно? Как мога да поправя това?

Отговори:

2 за отговор № 1

Вашият Users не са инициализирани. Създайте нов списък, преди да го осъществите Users = new List<UserRow>(); Можете да промените SupplierRow клас:

public class SupplierRow {
private List<UserRow> users = new List<UserRow>();

public List<UserRow> Users
{
get { return users; }
set { users = value; }
}
...
}

или в конструктора:

public class SupplierRow
{
public SupplierRow()
{
Users = new List<UserRow>();
}
public List<UserRow> Users { get; set; }
...
}

или преди да получите достъп до него:

foreach (UserRow ur in users)
{
foreach (SupplierRow sr in suppliers)
{
sr.Users = new List<UserRow>();
if (ur.SupplierId == sr.Id)
{
sr.Users.Add(ur);
}
}
}

или просто можете да използвате linq:

foreach (SupplierRow sr in suppliers)
{
sr.Users = users.Where(user => user.SupplierId == sr.Id);
}

return PartialView("_Grid", suppliers);