值从视图模型返回为null?

时间:2013-08-02 16:30:16

标签: c# asp.net-mvc entity-framework viewmodel

我尝试从我的视图模型中返回一个包含员工全名列表的列表。但是值返回为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);
    }

如果您需要进一步澄清,请与我们联系。

提前致谢

2 个答案:

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