ASP.NET Core MVC中如何在索引视图仅显示当前登录用户记录
解决方案步骤
1. 给CommitmentForm模型添加用户关联字段
修改CommitmentForm实体类,添加关联IdentityUser的UserId字段,可选添加导航属性优化EF Core关联逻辑:
public class CommitmentForm { // 原有字段保留 public int Id { get; set; } public string Title { get; set; } // 其他现有字段... // 添加用户关联必填字段 [Required] public string UserId { get; set; } // 可选:添加导航属性(如需关联查询用户信息) public IdentityUser User { get; set; } }
2. 更新数据库结构
打开Package Manager Console,执行以下命令生成迁移并同步数据库:
Add-Migration AddUserIdToCommitmentForm Update-Database
3. 修复Upsert Action,自动填充用户ID并跳转至Index
修改CommitmentFormController的Upsert方法,在POST请求时自动获取当前登录用户ID,赋值给模型字段,保存后跳转至Index视图:
[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Upsert(CommitmentForm commitmentForm) { // 获取当前登录用户的唯一标识ID var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier); // 为模型自动填充UserId,避免ModelState验证失败 commitmentForm.UserId = currentUserId; if (ModelState.IsValid) { if (commitmentForm.Id == 0) { _db.CommitmentForms.Add(commitmentForm); } else { _db.CommitmentForms.Update(commitmentForm); } await _db.SaveChangesAsync(); // 跳转至Index视图,替代原有的Details跳转 return RedirectToAction(nameof(Index)); } return View(commitmentForm); }
注意:Upsert视图中不要渲染
UserId字段(比如不要添加<input asp-for="UserId" />),完全由后台自动赋值,避免前端干扰。
4. 修复Index Action,仅展示当前用户的记录
取消Index Action的注释,添加用户ID过滤逻辑:
public IActionResult Index() { var currentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier); // 仅查询当前用户创建的记录 var userCommitments = _db.CommitmentForms.Where(c => c.UserId == currentUserId).ToList(); return View(userCommitments); }
5. 视图验证
确保Index视图遍历的是控制器传递的userCommitments集合,页面将只显示当前登录用户的提交记录。
内容的提问来源于stack exchange,提问作者Misa Carlo
相关产品推荐
相关产品推荐

