戳戳猫的小窝
更新日志
关于
为了能够通过MajorId和GradeId获取对应的班级列表,需要在ClassRepo中添加对应的方法。 # 添加GetList方法 新增的GetList方法和基类中的GetList方法不同之处是它接收2个参数,分别是Guid?类型的majorId和gradeId。 Guid代表参数可为空,如果为空,就不去筛选这一项。 要做这件事,需要先通过AsQueryable方法使DbSet支持更复杂的查询。 然后分别判断majorId和gradeId是否为空,如果不为空,则添加Where方法筛选数据。 最后将查询的数据返回。 代码如下: ``` public List<Class> GetList(Guid? majorId, Guid? gradeId) { IQueryable<Class> query = DbSet.AsQueryable(); if (majorId != null) { query = query.Where(c => c.MajorId.Equals(majorId)); } if (gradeId != null) { query = query.Where(c => c.GradeId.Equals(gradeId)); } return query.ToList(); } ``` # 添加GetClassSelectModel方法 在StudentService中添加GetClassSelectModel方法。 GetClassSelectModel方法接收3个参数,分别是classId,majorId,gradeId. 通过GetClassSelectModel方法,可以获取筛选后班级列表。 代码如下: ``` public StudentViewModel GetClassSelectModel(Guid? classId, Guid? majorId, Guid? gradeId) { StudentViewModel model = new StudentViewModel(); List<Class> classes = classRepo.GetList(majorId, gradeId); model.Classes = new SelectList(classes, "Id", "Name", classId); return model; } ``` 其中SelectList的第4个参数表示默认选项,如果班级列表中没有找到默认选项对应的值则默认选择第一个。 # 创建GetClassSelectPartial动作 在StudentController中创建GetClassSelectPartial动作,参数列表和GetClassSelectModel相同。 和前面的Action不同,GetClassSelectPartial返回的是PartialView,表示返回一个分部视图。 代码如下: ``` public IActionResult GetClassSelectPartial(Guid? classId, Guid? majorId, Guid? gradeId) { return PartialView("ClassSelectPartial", studentService.GetClassSelectModel(classId, majorId, gradeId)); } ``` 其中,PartialView的第一个参数表示返回的分部视图的文件名,第二个参数表示返回的视图模型。 # 创建分部视图 在Views下的Student文件夹中创建一个名为ClassSelectPartial.cshtml的分部视图文件。 分部视图的用法和普通视图类似,可以设置视图模型,区别只是分部视图不和布局文件结合。 由于GetClassSelectPartial返回的视图模型类型是StudentViewModel,因此将视图模型设置为StudentViewModel。 然后在下面添加一个select标签解析班级列表即可。 代码如下: ``` @model StudentViewModel <select asp-for="ClassId" asp-items="Model.Classes"> <option value="">请选择</option> </select> ``` # 测试 现专业表中有数据如下: ![image-20240818175052630](https://image.nyazira.top/Article/image-20240818175052630.png) 年级表中有数据如下: ![image-20240818175230762](https://image.nyazira.top/Article/image-20240818175230762.png) 班级表中有数据如下: ![image-20240818175515437](https://image.nyazira.top/Article/image-20240818175515437.png) 可以假设我们要获取2020级软件工程的班级列表,可以在地址栏输入: ``` /Student/GetClassSelectPartial?majorId=79351D62-661C-42E5-803F-4FEF6F8A5F23&gradeId=6930E40B-519F-43BA-AFFB-F08B2AF0F12D ``` 这样就获得了一个下拉列表。 ![image-20240818175814959](https://image.nyazira.top/Article/image-20240818175814959.png) 如果想默认选择其中某一个班级,主需要在后面附加classId的值即可。
分部视图