表格没有在asp.net mvc 4中更新

时间:2015-02-03 05:02:11

标签: c# sql-server asp.net-mvc

我正在尝试使用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。

2 个答案:

答案 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的属性,然后您将获得结果。

如果您发现任何困难,请告诉我。