创建视图模型

查询功能需要创建2个视图模型,一个是提交查询数据的视图模型,称为SearchViewModel,另一个是返回数据列表的视图模型,称为ResultViewModel。

其中,ResultViewModel是SearchViewModel的组成部分。

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>();
}

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