You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:03:22