我有以下带有构造函数的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,如下所示:
我调试了代码的执行,看起来构造函数被正确调用,我无法理解为什么所有列表在此之后仍为空。
我是C#的新手,所以也许我只是错过了一些基本的东西,并且非常感谢您提供的任何帮助。
提前谢谢。
Ps:这种情况的问题是我得到一个空引用异常,因为在我的视图中使用时我的列表为空。
答案 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>>();
}
您忘记初始化您的媒体资源。