gpt4 book ai didi

c# - 具有修改值的 TryUpdateModelAsync

转载 作者:行者123 更新时间:2023-11-30 21:31:09 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com