在mvc 5中更新用户帐户的密码

时间:2017-08-28 16:07:20

标签: asp.net-mvc entity-framework asp.net-mvc-5

我目前正在处理用户帐户,到目前为止,我已设法通过电子邮件确认流程在注册和登录面板上工作。在这里,我陷入了忘记密码选项。我正在使用ado.net实体框架。我所要做的就是更改已注册电子邮件的密码。这是我到目前为止所做的。

注意:在控制器操作方法中获取错误

  

实体类型不是当前上下文模型的一部分

修改

我有一个名为registration的表附加到DBContext类。我试图更新伪造密码选项的记录(特别是密码字段)。我使用下面附带的验证创建了属性类UpdateAcccount.cs。为了更新密码,我检索了与电子邮件ID匹配的行。然后在数据库中传输更新的密码。

这次我收到的错误是"密码不匹配"虽然数据库中没有确认密码字段(注册表)+我甚至尝试使用bind(exclude)属性来确认密码,但这也没有用。

控制器类

[HttpPost]

    public ActionResult UpdateAccount(UpdateAccount account)
    {
        string message = "";
        bool status = false;

        if (ModelState.IsValid)
        {
            account.Password = Crypto.Hash(account.Password);
            account.ConfirmPassword = Crypto.Hash(account.ConfirmPassword);

            using (TravelGuide1Entities entity = new TravelGuide1Entities())
            {
                try
                {
                    var v = entity.Registrations.Where(a => a.Email == account.Email).FirstOrDefault();

                    if (v != null)
                    {
                        v.Password = account.Password;

                        entity.Entry(v).State = System.Data.Entity.EntityState.Modified;

                        entity.SaveChanges();

                        return RedirectToAction("Login");
                    }
                }
                catch(Exception e)
                {

                }
            }
        }

            return View();
    }

UpdateAccount.cs

public class UpdateAccount
{
    [Display(Name = "Email")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Email id required")]
    public string Email { get; set; }

    [Display(Name = "New Password")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Password required")]
    [DataType(DataType.Password)]
    [MinLength(6, ErrorMessage = "Minimum 6 character required")]
    public string Password { get; set; }

    [Display(Name = "Confirm Password")]
    [DataType(DataType.Password)]
    [Compare("Password", ErrorMessage = "Password do not match")]
    public string ConfirmPassword { get; set; }
}

UpdateAccount.cshtml

@model Travel.Models.UpdateAccount

@{
    ViewBag.Title = "UpdateAccount";
}

<h2>UpdateAccount</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>UpdateAccount</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ConfirmPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.ConfirmPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.ConfirmPassword, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

0 个答案:

没有答案