创建控制器及服务及视图模型

创建StudentViewModel

在Student模型中,除了Class导航外,有IdNumberNameGenderBirthdayClassId这些属性,因此StudentViewModel视图模型中也应该有这些属性。

除此之外还应该有MajorNameGradeNameClassName分别显示专业名称,年级,班级名称。

在创建学生和编辑学生的视图中,还需要通过专业和年级去筛选班级,因此还需要MajorIdGradeId获取班级列表。

最后,专业,年级,班级的下拉列表数据也需要通过视图模型传递。

最终,StudentViewModel的代码如下:

public class StudentViewModel
{
    public Guid Id { get; set; }

    [Required(ErrorMessage = "请输入学号")]
    [Display(Name = "学号")]
    public string Number { get; set; } = string.Empty;

    [Required(ErrorMessage = "请输入姓名")]
    [Display(Name = "姓名")]
    public string Name { get; set; } = string.Empty;

    [Display(Name = "性别")]
    public bool Gender { get; set; }

    [Display(Name = "生日")]
    [DataType(DataType.Date)]
    public DateTime Birthday { get; set; } = DateTime.Now;

    public Guid ClassId { get; set; }

    [Display(Name = "班级名称")]
    public string ClassName { get; set; } = string.Empty;

    public Guid? MajorId { get; set; }

    [Display(Name = "专业名称")]
    public string MajorName { get; set; } = string.Empty;

    public Guid? GradeId { get; set; }

    [Display(Name = "年级名称")]
    public string GradeName { get; set; } = string.Empty;

    public SelectList? Majors { get; set; }
    public SelectList? Grades { get; set; }
    public SelectList? Classes { get; set; }
}

其中[DataType(DataType.Date)]表示DateTime只显示年月日部分,=DateTime.Now表示默认时间为现在。

创建StudentService

创建StudentService并引入StudentRepo, MajorRepo, GradeRepo, ClassRepo的实例。

代码如下:

public class StudentService(StudentRepo studentRepo, MajorRepo majorRepo, GradeRepo gradeRepo, ClassRepo classRepo)
{

}

最后,通过AddScoped将StudentService注册为服务。

services.AddScoped<StudentService>();

创建StudentController

创建StudentController,并引入StudentService实例。

代码如下:

public class StudentController(StudentService studentService) : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}