我正在尝试使用asp.net mvc 4和实体框架6创建一个网站,用户可以在UserPassword
视图中更新其密码。密码存储为会话。我将密码存储在mssql数据库中。一切正常,但每当我点击更改密码时,它根本不会改变。我看着桌子和桌子。我可以看到以前的密码。这是我的代码,
控制器
[HttpPost]
public ActionResult UserPassword(UserInfo pass)
{
if (Session["UserNAME"] != null)
{
var PrevPass = testdb.UserInfoes.Where(a => a.Password.Equals(pass.Password)).FirstOrDefault();
if (Session["UserPASS"] == PrevPass)
{
if (ModelState.IsValid)
{
testdb.Entry(pass).State = System.Data.Entity.EntityState.Modified;
testdb.SaveChanges();
Session["UserPass"] = PrevPass.Password.ToString();
return RedirectToAction("UserLogin");
}
}
else
{
return RedirectToAction("ProfileView");
}
return View(pass);
}
else
{
return RedirectToAction("Login");
}
}
查看
@using (Html.BeginForm("UserPassword", "Home", FormMethod.Post)) {
@Html.ValidationSummary(true)
<div class="editor-label">
<strong>Current Password</strong>
</div>
<div class="editor-field">
@Html.PasswordFor(a => a.Password)
@Html.ValidationMessageFor(a => a.Password)
</div>
<div class="editor-label">
<strong>New Password</strong>
</div>
<div class="editor-field">
@Html.PasswordFor(a => a.Password)
@Html.ValidationMessageFor(a => a.Password)
</div>
<div class="editor-label">
<strong>Retype Password</strong>
</div>
<div class="editor-field">
@Html.PasswordFor(a => a.Password)
@Html.ValidationMessageFor(a => a.Password)
</div><br />
<p><input type="submit" class="btn btn-info" value="Update" /></p>
}
模型
public partial class UserInfo
{
public string UserId { get; set; }
public string Name { get; set; }
public string Password { get; set; }
public string AddressLine1 { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public System.DateTime CreatedDate { get; set; }
public System.DateTime ModifiedDate { get; set; }
public string IsInfoMatched { get; set; }
public string IsApproved { get; set; }
public string IsActive { get; set; }
public string IsReportView { get; set; }
}
我的代码中有什么问题吗?如果是这样,请严格要求解决方案。我是asp.net的新手,所以我很努力掌握它。你的帮助对我来说是一种拯救生命。 TNX。
答案 0 :(得分:1)
请尝试以下代码更改密码
您的模型将
public partial class UserChangePassword
{
public string UserId { get; set; }
public string OldPassword { get; set; }
public string NewPassword{ get; set; }
public string ComparePassword{ get; set; }
}
您的观点将是
@using (Html.BeginForm("UserPassword", "Home", FormMethod.Post)) {
@Html.ValidationSummary(true)
<div class="editor-label">
<strong>Current Password</strong>
</div>
<div class="editor-field">
@Html.PasswordFor(a => a.OldPassword)
@Html.ValidationMessageFor(a => a.OldPassword)
</div>
<div class="editor-label">
<strong>New Password</strong>
</div>
<div class="editor-field">
@Html.PasswordFor(a => a.NewPassword)
@Html.ValidationMessageFor(a => a.NewPassword)
</div>
<div class="editor-label">
<strong>Retype Password</strong>
</div>
<div class="editor-field">
@Html.PasswordFor(a => a.ConfirmPassword)
@Html.ValidationMessageFor(a => a.ConfirmPassword)
</div><br />
<p><input type="submit" class="btn btn-info" value="Update" /></p>
}
你的行动将是
[HttpPost]
public ActionResult UserPassword(UserChangePassword model)
{
var user= testdb.UserInfoes.Where(a => a.UserId.Equals(model.UserId)).FirstOrDefault();
if (Session["UserPASS"] !=null&& ModelState.IsValid && model.OldPassword==user.Password)
{
user.Password=model.NewPassword;
testdb.Entry(user).State = System.Data.Entity.EntityState.Modified;
testdb.SaveChanges();
Session["UserPass"] = model.NewPassword.ToString();
return RedirectToAction("UserLogin");
}
else
{
//False section
}
}
并不鼓励使用Session来保存登录详细信息。请改用表单身份验证。在考虑安全性时,使用散列密码是一种非常好的做法。
希望它能起作用..
答案 1 :(得分:0)
我猜你通过将它与模型类绑定来使你的观点变得强大,如果是这样当你点击更新按钮时,确保你在 userinfo 类中获取新密码,因为它正在使用旧密码。使用Debugger查看userInfo传递参数中的内容。
解决方案: 在 userInfo 类中添加newPassword的属性,然后您将获得结果。
如果您发现任何困难,请告诉我。