查询功能需要创建2个视图模型,一个是提交查询数据的视图模型,称为SearchViewModel,另一个是返回数据列表的视图模型,称为ResultViewModel。
其中,ResultViewModel是SearchViewModel的组成部分。
查询学生时,有6个可选的条件,分别是:
因此,SearchViewModel的基本属性如下:
public class SearchViewModel
{
public Guid? MajorId { get; set; }
public Guid? GradeId { get; set; }
public Guid? ClassId { get; set; }
public string? Number { get; set; }
public string? Name { get; set; }
public bool? Gender { get; set; }
}
由于查询条件可为空,因此它们均为可空类型。
但是SearchViewModel还承担了传输下拉列表数据的职责,因此还需要添加2个下拉列表。
为什么不是3个?
因为班级的下拉列表可以调用StudentController中的分部视图
最后,SearchViewModel还需要将查询的数据传递给视图,因此还需要附带ResultViewModel的列表。
最终,SearchViewModel的代码如下所示:
public class SearchViewModel
{
public Guid? MajorId { get; set; }
public Guid? GradeId { get; set; }
public Guid? ClassId { get; set; }
public string? Number { get; set; }
public string? Name { get; set; }
public bool? Gender { get; set; }
public SelectList? Majors { get; set; }
public SelectList? Grades { get; set; }
public List<ResultViewModel> Results { get; set; } = new List<ResultViewModel>();
}
查询后的数据除了显示SearchViewModel中的6个属性外,还要显示生日。
最终ResultViewModel中的代码如下:
public class ResultViewModel
{
public string Number { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string MajorName { get; set; } = string.Empty;
public string GradeName { get; set; } = string.Empty;
public string ClassName { get; set; } = string.Empty;
public bool Gender { get; set; }
public DateTime Birthday { get; set; }
}