首页 > 解决方案 > TryUpdateModelAsync 修改后的值

问题描述

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

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。

我怎样才能做到这一点?

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

解决方案


在您的示例中,调用TryUpdateModelAsync最终会adminUpdate根据ModelState. 如果您想为 设置另一个值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");
}

在上面的示例中,我还a => a.Password从 中删除了它,TryUpdateModelAsync因为它现在是多余的 - 在调用SaveChangesAsync.


推荐阅读