首页 > 解决方案 > 管理员如何在 ASP.NET Core 中更改 SQL Server 中的数据?

问题描述

我正在尝试添加一个控制器,ApplicationUser.cs以便当管理员登录时,他们能够查看、编辑、删除dbo.AspNetUsers表中的任何记录,但是我认为我做错了。

 <form asp-controller="Admin" asp-action="ActiveUser" method="post">
            <input type="hidden" asp-for="@user.Email" />
            <button type="submit" class="btn btn-primary">Active</button>
        </form>

管理员控制器:

  [HttpGet]
    public IActionResult ActiveUser() { return View(); }


    [HttpPost]
    public async Task<ActionResult> ActiveUser(ApplicationUser Model)
    {
         var active =_userManager.Users.FirstOrDefault(p => p.Email == Model.Email);
        if (active != null)
        {
            active.IsActive = true;
            using (var transaction = _application.Database.BeginTransaction())
            {
                try
                {

                    await _application.SaveChangesAsync();
                    transaction.Commit();

                }
                catch (Exception ex)
                {
                    _ = (ex.Message);
                    transaction.Rollback();
                    return View("Er");
                }
            }
        }
        return View();
    }

但我认为提交按钮链接到错误的表单帖子,因为当我调试活动时为空!并且我的 SQL Server 没有任何变化。如何管理它?

标签: sql-serverasp.net-coremodel-view-controllerasp.net-core-mvcasp.net-core-identity

解决方案


要添加、删除和修改用户和角色,AspNetUsers您必须使用UserManagerRoleManager服务。不要尝试直接使用DbContext.

所以要创建一个用户调用该UserManager.CreateAsync()方法。保存对用户呼叫的更改UserManager.UpdateAsync()

示例 - 要通过电子邮件地址查找用户,请更改属性然后保存更改:

var currentUser = await _userManager.FindByEmailAsync(email);
currentUser.IsActive = true;
await _userManager.UpdateAsync(currentUser);

这同样适用于用户所在的角色。使用该RoleManager服务添加和删除角色。

if (!await roleManager.RoleExistsAsync(roleName))
{
    await roleManager.CreateAsync(new IdentityRole(roleName));
}
await userManager.AddToRoleAsync(currentUser, roleName);

Microsoft 文档,其中包含一些更新用户和角色的示例


推荐阅读