我使用模型绑定更新数据库,如下所示:
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");
}
我的问题是,我需要在数据库的“密码”字段中插入“ password”变量而不是a.Password。
我该怎么做?
答案 0 :(得分:2)
在您的示例中,对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
,因为它现在是多余的-在调用{{1}之前,显式赋值中覆盖的任何设置都被覆盖}。
答案 1 :(得分:1)
您是否可以尝试添加新行(在TryUpdateModelAsync的正上方)
adminUpdate.Password = password;
if (await TryUpdateModelAsync(
adminUpdate,