Mad*_*ads 3 c# asp.net-core-mvc asp.net-core
我使用模型绑定更新数据库,如下所示:
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");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我需要在数据库密码字段中插入“密码”变量而不是 a.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");
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我还a => a.Password从 中删除了TryUpdateModelAsync,因为它现在是多余的 - 无论设置什么值,都会在调用 之前的显式赋值中被覆盖SaveChangesAsync。
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |