我尝试从我的视图模型中返回一个包含员工全名列表的列表。但是值返回为null,我似乎无法弄清楚原因。我也受到了这个可爱的错误的欢迎:
对象引用未设置为对象的实例。
该错误明确地将我的AllEmployees()方法中的foreach循环显示为问题
这是我的实体:
namespace ROIT.Entities
{
public class Employee : Entity<Employee>
{
public string FirstName { get; set; }
public string LastName { get; set; }
[NotMapped]
public string FullName {
get { return FirstName + " " + LastName; }
}
}
}
这是我的观点模型:
namespace ROIT.Web.Models
{
public class ContractPageViewModel
{
public ICollection<Contract> Contracts { get; set; }
public Contract Contract { get; set; }
public ICollection<Roi> Rois { get; set; }
public ICollection<Employee> Employees { get; set; }
public ICollection<ContractResource> ContractResources { get; set; }
public ICollection<LaborCategory> LaborCategories{ get; set; }
public List<string> AllEmployeesList { get; set; }
public void AllEmployees()
{
AllEmployeesList = new List<string>();
foreach (Employee item in Employees)
{
AllEmployeesList.Add(item.FirstName);
}
}
}
}
然后我的控制器回来了:
public ActionResult testview()
{
var model = new ContractPageViewModel();
model.Contracts = db.Contracts.Include(c => c.Business).Include(c => c.Customer).ToList();
model.AllEmployees();
return View(model);
}
如果您需要进一步澄清,请与我们联系。
提前致谢
答案 0 :(得分:1)
您的Employees
变量:
public ICollection<Employee> Employees { get; set; }
...在尝试循环之前没有实例化。更明确地,将其声明为属性并不会将Employees
的实例设置为等于任何内容;因此,除非您将其设置在别处(上面未显示),否则当您尝试访问它时,它将为null
。
答案 1 :(得分:0)
您必须像Employees
一样为Contract
分配一个列表。当您调用AllEmployees
方法时,该对象仍为null
。
附注:你可以将你的财产重写为:
public ICollection<Employee> Employees { get; set; }
public List<string> AllEmployeesList
{
get
{
return this.Employees.Select<Employee, string>(x => x.FirstName).ToList();
}
private set;
}