0

我试图从我的视图模型中返回一个包含员工全名列表的列表。但是这些值返回为空,我似乎无法弄清楚原因。我也收到了这个可爱的错误:

你调用的对象是空的。

该错误特别表明我的 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);
    }

如果您需要更多说明,请告诉我。

提前致谢

4

2 回答 2

1

你的Employees变量:

public ICollection<Employee> Employees { get; set; }

...在您尝试循环之前没有被实例化。更清楚地说,将其声明为属性不会将实例设置为Employees等于任何东西。因此,除非您在其他地方设置它(上面未显示),否则它将null在您尝试访问它时进行。

于 2013-08-02T16:39:04.047 回答
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; 
}
于 2013-08-02T16:42:36.353 回答