戳戳猫的小窝
更新日志
关于
# 添加GetEditModel方法 在进入编辑视图前,不仅需要获取下拉列表的数据,还需要通过Id获取班级的数据。 代码如下: ``` public ClassViewModel GetEditModel(Guid id) { Class? @class = classRepo.Get(id); if (@class == null) { throw new NullReferenceException(); } ClassViewModel model = new ClassViewModel() { Id = @class.Id, MajorId = @class.MajorId, GradeId = @class.GradeId, Name = @class.Name, }; ClassViewModel selectListModel = GetSelectListModel(); model.Majors = selectListModel.Majors; model.Grades = selectListModel.Grades; return model; } ``` 由于获取下拉列表模型的方法已经存在,因此可以直接调用。 # 创建Edit动作 Edit动作需要通过Id指定具体要修改哪一个班级的数据,如果找到此班级,则返回视图模型给视图,否则返回404状态码。 代码如下: ``` public IActionResult Edit(Guid id) { ClassViewModel model; try { model = classService.GetEditModel(id); } catch (NullReferenceException) { return NotFound(); } return View(model); } ``` # 创建Edit视图 Edit视图和Add视图几乎相同,只需要修改标题,以及添加一个Id属性的input标签即可。 代码如下: ``` @{ ViewBag.Title = "编辑班级"; } @model ClassViewModel <form method="post" class="mx-auto" style="width:320px;"> <div asp-validation-summary="All" class="has-text-danger mb-4"></div> <input asp-for="Id" hidden> <div class="field"> <label asp-for="MajorName" class="label"></label> <div class="control"> <div class="select is-fullwidth"> <select asp-for="MajorId" asp-items="Model.Majors"></select> </div> </div> </div> <div class="field"> <label asp-for="GradeName" class="label"></label> <div class="control"> <div class="select is-fullwidth"> <select asp-for="GradeId" asp-items="Model.Grades"></select> </div> </div> </div> <div class="field"> <label asp-for="Name" class="label"></label> <div class="control"> <input asp-for="Name" class="input"> </div> </div> <div class="field"> <button class="button is-primary is-fullwidth">提交</button> </div> </form> ``` # 添加Update方法 在Service中将视图模型转换为模型并插入到数据库中。 代码如下: ``` public void Update(ClassViewModel model) { Class @class = new Class { Id = model.Id, MajorId = model.MajorId, GradeId = model.GradeId, Name = model.Name }; classRepo.Update(@class); } ``` # 创建post请求的Edit动作 和Add动作类似,只是将Insert方法替换成Update方法。 代码如下: ``` [HttpPost] public IActionResult Edit(ClassViewModel model) { if (ModelState.IsValid) { classService.Update(model); return RedirectToAction("Index"); } ClassViewModel selectListModel = classService.GetSelectListModel(); model.Majors = selectListModel.Majors; model.Grades = selectListModel.Grades; return View(model); } ```
编辑班级