如何使用带有实体框架

时间:2015-12-27 14:41:36

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

我使用Entity Framework创建了一个带有视图的控制器。一切正常但我需要编辑用户密码而我没有这样的选项,只有passwordHash。

我该怎么做?

以下是UsersController的代码:

    public ActionResult Edit(string id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        ApplicationUser applicationUser = db.Users.Find(id);
        if (applicationUser == null)
        {
            return HttpNotFound();
        }
        return View(applicationUser);
    }

    // POST: Users/Edit/5
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "Id,Email,EmailConfirmed,PasswordHash,Password,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName")] ApplicationUser applicationUser)
    {
        if (ModelState.IsValid)
        {
            db.Entry(applicationUser).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(applicationUser);
    }

这是Edit.shtml:

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

如果我尝试使用model.Password,我有一个错误:

  

方法的类型参数   “System.Web.Mvc.Html.LabelExtensions.LabelFor(System.Web.Mvc.HtmlHelper,   System.Linq.Expressions.Expression&gt;中   System.Collections.Generic.IDictionary)'不能   从用法推断。尝试指定类型参数   明确。

我该如何解决这个问题?它是否与AspNetUsers表和ApplicationUser Model中的字段密码无关?

1 个答案:

答案 0 :(得分:0)

你不能,因为没有存储密码,正如你所说的那样,只有密码哈希存储在数据库中,所以通常的方法是从用户那里检索最后一个密码,然后哈希并将其与之比较如果存储的哈希值相等,那么您可以为用户设置新提供的密码,更简单的方法是使用用户管理器类及其UpdatePassword方法 进一步阅读: https://msdn.microsoft.com/en-us/library/dn613290%28v=vs.108%29.aspx