我用这样的模型绑定更新数据库:
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中插入“ password”变量。
我怎样才能做到这一点?
最佳答案
在您的示例中,对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
之前,显式赋值中覆盖的任何设置都将被覆盖。关于c# - 具有更新值的TryUpdateModelAsync,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53672503/