ASP.NET Core 3.1 Razor Page:删除后返回带更新列表的页面
解决Razor Page删除用户后返回空页面的问题
问题核心原因:执行删除的OnPostDelete方法后调用return Page(),Razor Pages不会自动触发OnGetAsync方法,导致页面绑定的UsersListModel没有被重新赋值(还是初始化的空列表),所以页面渲染时没有用户数据,显示为空。
下面提供两种可行的解决方法:
方案一:删除后手动重新加载用户列表
在OnPostDelete方法中重新获取最新的用户数据并赋值给UsersListModel,这样返回页面时模型就有更新后的内容:
修改UserList.cshtml.cs中的OnPostDelete方法:
public async Task<IActionResult> OnPostDelete(string userId) { var result = await _userService.Delete(userId); if (!result.Succeeded) { throw new InvalidOperationException($"Unexpected error occurred deleting user with ID '{userId}'."); } // 重新加载最新用户列表 var users = await _userService.GetUsers.ToListAsync(); var userViewModel = new List<UserViewModel>(); foreach (ApplicationUser user in users) { var thisViewModel = new UserViewModel(); thisViewModel.UserId = user.Id; thisViewModel.Email = user.Email; thisViewModel.FirstName = user.FirstName; thisViewModel.LastName = user.LastName; userViewModel.Add(thisViewModel); // 注意:原代码此处为笔误,需改为userViewModel } UsersListModel = userViewModel; return Page(); }
注意:原OnGetAsync方法里的userModel.Add(thisViewModel)是笔误,需修正为userViewModel.Add(thisViewModel),否则会出现编译错误。
方案二:采用PRG模式重定向到当前页面
这种方法更符合Web开发的规范,避免用户刷新页面时重复提交POST请求。通过RedirectToPage()重定向到当前页面,会自动触发OnGetAsync方法重新加载最新的用户数据:
修改OnPostDelete方法:
public async Task<IActionResult> OnPostDelete(string userId) { var result = await _userService.Delete(userId); if (!result.Succeeded) { throw new InvalidOperationException($"Unexpected error occurred deleting user with ID '{userId}'."); } // 重定向到当前页面,触发OnGetAsync重新加载数据 return RedirectToPage(); }
这种方法无需重复编写加载列表的代码,逻辑更简洁,推荐使用。
内容的提问来源于stack exchange,提问作者SoftwareDveloper
相关产品推荐
相关产品推荐

