Asp.net mvc 编辑自定义用户标识对象(在数据库中) 我正在使用ASP.NET身份制作我的第一个ASP.NET核心应用程序。我现在已经成功地创建了一个自定义的IdentityUser类(名为ApplicationUser),它扩展了脚手架标识包中附带的标准IdentityUser类ApplicationUser现在有一些额外的字段(地址、状态、名字、姓氏),我的应用程序和数据库以所需的方式识别这两个字段,并且在使用注册表表单时新用户被正确添加到数据库中。当然,我已经将IdentityUser的用法替换为ApplicationUser,并进行了定制

Asp.net mvc 编辑自定义用户标识对象(在数据库中) 我正在使用ASP.NET身份制作我的第一个ASP.NET核心应用程序。我现在已经成功地创建了一个自定义的IdentityUser类(名为ApplicationUser),它扩展了脚手架标识包中附带的标准IdentityUser类ApplicationUser现在有一些额外的字段(地址、状态、名字、姓氏),我的应用程序和数据库以所需的方式识别这两个字段,并且在使用注册表表单时新用户被正确添加到数据库中。当然,我已经将IdentityUser的用法替换为ApplicationUser,并进行了定制,asp.net-mvc,asp.net-core,.net-core,Asp.net Mvc,Asp.net Core,.net Core,Register.cshtml 及 Register.cshtml.cs ,以便使用额外的字段。 我现在的问题是,我觉得我不知道应该如何在“自然意义上”更新用户对象(在数据库中)。默认的UserManager似乎是为更新默认的IdentityUser实例而设计的,但不是从IdentityUser继承的类。似乎UserManager默认情况下处理异步操作之类的问题,而我怀疑唯一(默认情况下)有用的方法是UserManager中的#UpdateAsync。 我能做什么?UserManager使用从I

Register.cshtml

Register.cshtml.cs

,以便使用额外的字段。 我现在的问题是,我觉得我不知道应该如何在“自然意义上”更新用户对象(在数据库中)。默认的
UserManager
似乎是为更新默认的
IdentityUser
实例而设计的,但不是从
IdentityUser
继承的类。似乎
UserManager
默认情况下处理异步操作之类的问题,而我怀疑唯一(默认情况下)有用的方法是
UserManager
中的
#UpdateAsync

我能做什么?

UserManager
使用从
IdentityUser
继承的泛型类型,您已经完成了这项工作。因此,只需将
UserManager
而不是
UserManager
插入您需要的位置(例如Register.cshtml.cs),并使用它对您的用户进行操作。

下面是一个关于如何更新ApplicationUser的工作演示:

型号:

public class ApplicationUser:IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
视图:

@model应用程序用户
控制器:

public class HomeController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    public HomeController(UserManager<ApplicationUser> userManager)
    {
        _userManager = userManager;
    }
    
    [HttpPost]
    public IActionResult UpdateUser(ApplicationUser applicationUser)
    {
        var user = _userManager.FindByEmailAsync(applicationUser.Email).Result;
        //modify the data...
        user.FirstName = applicationUser.FirstName;
        user.LastName = applicationUser.LastName;
        var result = _userManager.UpdateAsync(user).Result;
        return RedirectToAction("Index");
    }
}
公共类HomeController:控制器
{
私有只读用户管理器_UserManager;
公共家庭控制器(用户管理器用户管理器)
{
_userManager=userManager;
}
[HttpPost]
公共IActionResult UpdateUser(应用程序用户应用程序用户)
{
var user=\u userManager.findbyemailsync(applicationUser.Email).Result;
//修改数据。。。
user.FirstName=applicationUser.FirstName;
user.LastName=applicationUser.LastName;
var result=\u userManager.UpdateAsync(user.result);
返回操作(“索引”);
}
}
应用程序上下文:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }
}
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序DBContext(DbContextOptions选项)
:基本(选项)
{
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
}
}
Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();
}
public void配置服务(IServiceCollection服务)
{
services.AddDbContext(选项=>
options.UseSqlServer(
GetConnectionString(“DefaultConnection”);
services.AddDefaultIdentity(options=>options.SignIn.RequireConfirmedAccount=false)
.AddEntityFrameworkStores();
services.AddControllersWithViews();
services.AddRazorPages();
}

Hi@Birdie,我的回答有助于您解决问题吗?
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = false)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();
    services.AddRazorPages();
}