赢得';t保存编辑
本文关键字:保存 编辑 赢得 | 更新日期: 2024-09-22 09:18:21
我在数据库中添加了一个布尔值"ChangedPassword"。我必须强制用户在第一次登录时更改密码。
在他们更改密码后,布尔值必须更改为true。它起作用了,但救不了它。
我的代码:
// POST: /Manage/ChangePassword
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
if (result.Succeeded)
{
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
if (user != null)
{
await SignInAsync(user, isPersistent: false);
}
SidewindContext db = new SidewindContext();
if (user.ChangedPassword == false)
{
user.ChangedPassword = true;
}
db.SaveChanges();
return RedirectToAction("Index", new { Message = ManageMessageId.ChangePasswordSuccess });
}
AddErrors(result);
return View(model);
}
我不确定我是否需要数据库。SaveChanges,但无论有没有它都无法工作。知道吗?让我知道。
您需要在新创建的DbContext
中Attach
对象,以便EntityFramework开始跟踪对象的更改。如果没有它,新创建的上下文对user
对象的更改一无所知。
SidewindContext db = new SidewindContext();
db.Attach(user);
if (user.ChangedPassword == false)
{
user.ChangedPassword = true;
}
db.SaveChanges();
我认为你应该试试这个
db.Entry(user).State = System.Data.EntityState.Modified;
db.SaveChanges();