在Student模型中,除了Class导航外,有Id,Number,Name,Gender,Birthday,ClassId这些属性,因此StudentViewModel视图模型中也应该有这些属性。
除此之外还应该有MajorName,GradeName,ClassName分别显示专业名称,年级,班级名称。
在创建学生和编辑学生的视图中,还需要通过专业和年级去筛选班级,因此还需要MajorId和GradeId获取班级列表。
最后,专业,年级,班级的下拉列表数据也需要通过视图模型传递。
最终,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并引入StudentRepo, MajorRepo, GradeRepo, ClassRepo的实例。
代码如下:
public class StudentService(StudentRepo studentRepo, MajorRepo majorRepo, GradeRepo gradeRepo, ClassRepo classRepo)
{
}
最后,通过AddScoped将StudentService注册为服务。
services.AddScoped<StudentService>();
创建StudentController,并引入StudentService实例。
代码如下:
public class StudentController(StudentService studentService) : Controller
{
public IActionResult Index()
{
return View();
}
}