我用这样的模型绑定(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/