c# - 具有修改值的 TryUpdateModelAsync

标签 c# asp.net-core asp.net-core-mvc

我用这样的模型绑定(bind)更新我的数据库:

var adminUpdate = await _context.Admins.FindAsync(Id);

if (!String.IsNullOrEmpty(Password)) {
    if (Password != PasswordCheck) {
        ModelState.AddModelError("Password", "Passwords do not match");
    } else {
        byte[] data = Encoding.UTF8.GetBytes(Password + Configuration["SomeLocation:SomeKey"]);
        data = SHA512.Create().ComputeHash(data);
        password = Convert.ToBase64String(data);
    }
} else {
    password = adminUpdate.Password;
}

if (!ModelState.IsValid) {
    return Page();
}

if (await TryUpdateModelAsync(
    adminUpdate,
    "",
    a => a.FirstName,
    a => a.LastName,
    a => a.Email,
    a => a.Password, // must be the value of "password"
    a => a.Status,
    a => a.CompanyId
    ))
{
    await _context.SaveChangesAsync();
    return Redirect("/admin");
}

我的问题是,我需要在数据库密码字段中插入“密码”变量而不是 a.Password。

我该怎么做?

最佳答案

在您的示例中,对 TryUpdateModelAsync 的调用最终会根据 ModelState 中的值设置您的 adminUpdate 实例的属性。如果您想为 Password 设置另一个值,您可以在调用 TryUpdateModelAsync 之后这样做,如下所示:

if (await TryUpdateModelAsync(
    adminUpdate,
    "",
    a => a.FirstName,
    a => a.LastName,
    a => a.Email,
    a => a.Status,
    a => a.CompanyId
    ))
{
    adminUpdate.Password = password;
    await _context.SaveChangesAsync();
    return Redirect("/admin");
}

在上面的示例中,我还从 TryUpdateModelAsync 中删除了 a => a.Password,因为它现在是多余的 - 设置的任何值都会被覆盖调用 SaveChangesAsync 之前的显式赋值。

关于c# - 具有修改值的 TryUpdateModelAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672503/

相关文章:

asp.net-mvc-5 - 在 ASP.Net Core MVC Controller 中访问提交按钮的数据属性?

C# Outlook Mailitem ContextMenu 和 Ribbon 不能一起工作(只能单独使用)

c# - 如何在 Visual Studio 2019 中添加 .mdf 文件?

c# - 来自 using block 的异常抛出

c# - 如何向 ASP.NET Core 添加自定义角色

c# - GetOwinContext 在 ASP.NET Core 中不起作用

c# - 实例化 RoleManager 以将角色添加到数据库时出错

c# - Razor Pages - 由于多个对象共享参数,模型验证失败

c# - 在放置或移除 key 时获取 USB 唯一 ID

c# - 图像在 chrome 和 Firefox 中看起来不同