如何编辑FormCollection值,然后将TryUpdateModel与编辑后的集合一起使用?

时间:2015-04-09 22:30:55

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

MVC5以明文形式存储我的密码。我不想使用默认的散列算法,因为我需要来代替使用e.Encrypt()。我正在创建注册功能,我需要知道如何在使用FormCollection之前编辑TryUpdateModel中的值。

以下是代码:

    [HttpPost]
    public ActionResult Register([Bind(Include = "User,Pass,Email")] FormCollection form)
    {
        var user = new Users();
        string Hash = e.Encrypt(form["Pass"]); // Gets set.
        if (TryUpdateModel(user, form))
        {
            context.Entry(user).State = EntityState.Added;
            context.SaveChanges();
            return RedirectToAction("Login", "Account");
        }
        return View();
    }

我搜索过高低,我发现的一切与我的需求无关。

我试过这个:

form["Password"] = e.Encrypt(form["Password"])

...并编译,但在调试时,该值永远不会被设置。 e.Encrypt()确实可以正常工作,所以不是这样。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我在经过一些试验和错误后想出来了:

    [HttpPost]
    // Remove FormCollection and replace with UserModel.
    public ActionResult Register([Bind(Include= "Username,Password,EmailAddress")] UserModel user)
    {
        if (TryUpdateModel(user))
        {
            // Set password in TryUpdate success.
            user.Password = e.Encrypt(user.Password);; // Set correctly

            context.Entry(user).State = EntityState.Added;
            context.SaveChanges();
            return RedirectToAction("Login", "Account");
        }
        return View();
    }

然而,又出现了另一个问题,DataValidationError。问题来自UserModel.cs类:

    [RegularExpression(RegexPassword, ErrorMessage = ErrorPassword)]

我有一个与哈希不匹配的正则表达式,所以当我尝试更新时,它无法验证。这对另一个线程来说是一个问题,但我现在就把它删除了。