ASP.NET中FindByIdAsync返回数据但无法赋值变量的问题排查
编辑角色时FindByIdAsync返回null的问题修复
以下是排查出的三个核心问题及对应修复方案:
1. 编辑按钮传递了错误参数
原问题:角色列表视图里的编辑按钮,传递的是@Model.CurrentRoles整个集合,而非当前角色的@item.Id。这导致后端拿到的不是有效角色ID,自然查不到数据。
修复:修改编辑按钮的路由参数,明确传递当前项的ID:
<a asp-page="EditRole" asp-route-id="@item.Id" class="btn btn-primary">编辑</a>
2. 页面模型ID类型与IdentityRole不匹配
原问题:EditRole页面模型的Id属性定义为int类型,但ASP.NET Identity的IdentityRole默认Id是string类型。类型不匹配会导致参数绑定失败,后端拿到的ID为空或无效值。
修复:将页面模型中的Id属性改为string类型:
public class EditRoleModel : PageModel { [BindProperty(SupportsGet = true)] public string Id { get; set; } // 其他属性和逻辑... }
3. OnGet方法错误重定向,未传递模型到页面
原问题:OnGet方法创建EditRoles模型后直接重定向到Index页,导致编辑页面无法获取到模型数据,同时也打断了正常的页面加载流程。
修复:移除重定向逻辑,直接查询角色数据并赋值给页面模型,最后返回当前编辑页面:
public async Task<IActionResult> OnGetAsync() { if (string.IsNullOrWhiteSpace(Id)) { return NotFound(); } var role = await _roleManager.FindByIdAsync(Id); if (role == null) { return NotFound(); } // 将角色数据映射到页面模型属性 RoleName = role.Name; // 其他必要的赋值操作... return Page(); // 返回编辑页面,而非重定向到Index }
内容的提问来源于stack exchange,提问作者abtrini
相关产品推荐
相关产品推荐

