即使在调用构造函数之后,对象列表也为null

时间:2016-05-09 19:45:21

标签: c# asp.net-mvc constructor

我有以下带有构造函数的viewmodel:

public class ActivitiesReportViewModel
{

    public ActivitiesReportViewModel()
    {
        List<ActivityType> ActivityTypeList = new List<ActivityType>();
        List<Activity> ActivityList = new List<Activity>();
        List<Client> ClientList = new List<Client>();
        List<List<ActivityCounter>> ActivityCounterList = new List<List<ActivityCounter>>();
    }

    [DisplayName("Responsável")]
    public string UserName { get; set; }

    [DisplayName("Data Inicial")]
    [Required]
    public DateTime DateFrom { get; set; }

    [DisplayName("Data Final")]
    [Required]
    public DateTime DateTo { get; set; }

    [DisplayName("Tipos de Atividade")]
    public virtual List<ActivityType> ActivityTypeList { get; set; }

    [DisplayName("Atividades")]
    public virtual List<Activity> ActivityList { get; set; }

    [DisplayName("Clientes")]
    public virtual List<Client> ClientList { get; set; }

    public List<List<ActivityCounter>> ActivityCounterList { get; set; }

}

我的ActionResult:

 public ActionResult ActivityReport()
    {
      var model = new ActivitiesReportViewModel();
      return View(model);
    }

但是在初始化模型之后,所有列表都为null,如下所示:

debug showing null list

我调试了代码的执行,看起来构造函数被正确调用,我无法理解为什么所有列表在此之后仍为空。

我是C#的新手,所以也许我只是错过了一些基本的东西,并且非常感谢您提供的任何帮助。

提前谢谢。

Ps:这种情况的问题是我得到一个空引用异常,因为在我的视图中使用时我的列表为空。

4 个答案:

答案 0 :(得分:3)

您在构造函数中声明新的局部变量并分配给它们,而不是分配给您的类中的属性。

将构造函数更改为:

public ActivitiesReportViewModel()
{
    ActivityTypeList = new List<ActivityType>();
    ActivityList = new List<Activity>();
    ClientList = new List<Client>();
    ActivityCounterList = new List<List<ActivityCounter>>();
}

允许这样的重复名称,但会让事情变得混乱。

答案 1 :(得分:0)

您没有在构造函数中指定任何值。您需要添加包含所有字段的另一个构造函数,然后分配它们。然后在实例化中添加字段

答案 2 :(得分:0)

您的初始化错误。您正在创建另一个变量而不是实例化实例成员

    public class ActivitiesReportViewModel
{

    public ActivitiesReportViewModel()
    {
        ActivityTypeList = new List<ActivityType>();
        ActivityList = new List<Activity>();
        ClientList = new List<Client>();
        ActivityCounterList = new List<List<ActivityCounter>>();
    }

    [DisplayName("Responsável")]
    public string UserName { get; set; }

    [DisplayName("Data Inicial")]
    [Required]
    public DateTime DateFrom { get; set; }

    [DisplayName("Data Final")]
    [Required]
    public DateTime DateTo { get; set; }

    [DisplayName("Tipos de Atividade")]
    public virtual List<ActivityType> ActivityTypeList { get; set; }

    [DisplayName("Atividades")]
    public virtual List<Activity> ActivityList { get; set; }

    [DisplayName("Clientes")]
    public virtual List<Client> ClientList { get; set; }

    public List<List<ActivityCounter>> ActivityCounterList { get; set; }

}

答案 3 :(得分:0)

public ActivitiesReportViewModel()
{
    this.ActivityTypeList = new List<ActivityType>();
    this.ActivityList = new List<Activity>();
    this.ClientList = new List<Client>();
    this.ActivityCounterList = new List<List<ActivityCounter>>();
}

您忘记初始化您的媒体资源。