Asp.net MVC 用户管理器更新

Posted

技术标签:

【中文标题】Asp.net MVC 用户管理器更新【英文标题】:Asp.net MVC UserManager Update 【发布时间】:2015-11-27 22:43:28 【问题描述】:

我试图更新数据库中的用户数据,我从视图中获取值并将这些数据分配给当前用户。然而,当我更新用户数据var result = await UserManager.UpdateAsync(userAccount);时,我在该行出现错误。它是这样写的一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。。我该如何解决?谢谢

控制器:

public ApplicationUserManager UserManager
    
        get
        
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        
        private set
        
            _userManager = value;
        
    

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> ModifyAccount(ModifyUserAccountViewModel model)
    
        var user = await UserManager.FindByIdAsync(int.Parse(User.Identity.GetUserId()));
        UserAccount userAccount = (UserAccount)user;
        userAccount.surname = model.surname;
        userAccount.name = model.name;
        userAccount.Email = model.email;
        var result = await UserManager.UpdateAsync(userAccount);
        if (result.Succeeded)
        
            return RedirectToAction("Index", new  Message = "Account modyfyied successfully!" );
        
        AddErrors(result);
        return View("Error");
     

Startup.cs:

public void Configuration(IAppBuilder app)
    
        ConfigureAuth(app);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);          
    

【问题讨论】:

您是否:请参阅“EntityValidationErrors”属性了解更多详细信息?你能确定你得到了什么验证错误吗? System.Data.Entity.Validation.DbEntityValidationException,是这样写的 您可以尝试使用此代码来确定导致您的错误的属性:***.com/a/6258174/1081079 **App_Web_2cj5f1rz.dll 中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理 ** 我现在正在处理该错误 您可以发布您更改的代码吗? 【参考方案1】:

您可以按照@Praveen Prasad 在this 帖子中的建议尝试捕获异常以查看您有哪些验证错误:

 [HttpPost]
 [ValidateAntiForgeryToken]
 public async Task<ActionResult> ModifyAccount(ModifyUserAccountViewModel model)
 
    var user = await UserManager.FindByIdAsync(int.Parse(User.Identity.GetUserId()));
    UserAccount userAccount = (UserAccount)user;
    userAccount.surname = model.surname;
    userAccount.name = model.name;
    userAccount.Email = model.email;

    try  
      var result = await UserManager.UpdateAsync(userAccount);
    
    catch (DbEntityValidationException dbEx)
    
        foreach (var validationErrors in dbEx.EntityValidationErrors)
        
            foreach (var validationError in validationErrors.ValidationErrors)
            
               Trace.TraceInformation("Property: 0 Error: 1", 
                                validationError.PropertyName, 
                                validationError.ErrorMessage);
            
        
    

    if (result.Succeeded)
    
       return RedirectToAction("Index", new  Message = "Account modyfyied successfully!" );
    
    AddErrors(result);
    return View("Error");

【讨论】:

以上是关于Asp.net MVC 用户管理器更新的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net MVC 中实现超级用户功能?

如何在 C# 页面 ASP.NET Core MVC 上使用 SignInManager 和 Usermanager

ASP。 NET MVC 5:如果用户是管理员,则返回所有用户的列表

七天学会ASP.NET MVC ——Layout页面使用和用户角色管理

管理不同的用户角色 ASP.NET MVC [关闭]

如何在asp.net mvc 5中批准或拒绝管理员批准的用户端记录