优化 DeleteRole 方法,更新数据库出错时通过 ViewBag 传递错误信息:

    1. [HttpPost]
    2. public async Task<IActionResult> DeleteRole(string id)
    3. {
    4. var role = await _roleManager.FindByIdAsync(id);
    5. if (role == null)
    6. {
    7. ViewBag.ErrorMessage = $"角色 Id {id} 的信息不存在,请重试。";
    8. return View("NotFound");
    9. }
    10. try
    11. {
    12. var result = await _roleManager.DeleteAsync(role);
    13. if (result.Succeeded)
    14. {
    15. return RedirectToAction("ListRoles");
    16. }
    17. foreach (var error in result.Errors)
    18. {
    19. ModelState.AddModelError("", error.Description);
    20. }
    21. return View("ListRoles");
    22. }
    23. catch (DbUpdateException ex)
    24. {
    25. _logger.LogError($"发生异常 {ex}");
    26. ViewBag.ErrorTitle = $"角色 {role.Name} 正在被使用中";
    27. ViewBag.ErrorMessage = $"无法删除 {role.Name} 角色,因为此角色中已存在用户。需先删除该角色中的用户,再尝试删除角色本身。";
    28. return View("Error");
    29. }
    30. }

    优化 Error 视图以显式自定义错误:

    1. @{
    2. ViewBag.Title = "异常错误页面";
    3. }
    4. @if (string.IsNullOrEmpty(ViewBag.ErrorTitle))
    5. {
    6. <h3>程序请求时,发生了一个内部错误,我们会反馈给开发团队,尽快解决该问题</h3>
    7. <h5>请通过 ltm@xxx.org 与我们取得联系</h5>
    8. }
    9. else
    10. {
    11. <h1 class="text-danger">@ViewBag.ErrorTitle</h1>
    12. <h5 class="text-danger">@ViewBag.ErrorMessage</h5>
    13. }

    效果:
    image.png