mvc5表单验证更新失败

本文关键字:失败 更新 验证 表单 mvc5 | 更新日期: 2023-09-27 18:21:09

我一直在做一个基于mvc5的项目。我在Model类上应用了表单验证。应用"比较"条件User_password和User_password_Confirm。插入时效果非常好。但当我必须更新同一客户端的信息时,而不是密码,在这种情况下,我的MoldeStat.Valid是"false",因为我认为这是因为密码上的"比较"条件。

有人能告诉我如何解决这个问题吗?我正面临"更新"的问题。

感谢您提前帮助

我的型号类

    [Required(ErrorMessage = "*")]
    public string User_Password { get; set; }

    [Compare("User_Password")]
    [Required(ErrorMessage = "*")]
    public string User_Password_Confirm { get; set; }enter code here

我的控制器类

   [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit2([Bind(Include = "User_Id,User_Nom,User_Prenom,User_Email,User_Telephone,User_Role,User_Password,User_Password_Confirm,UserCreationDate,User_Status")] User user)
    {
        if (ModelState.IsValid)
        {
            //db.Entry(user).State = EntityState.Modified;
            //db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.User_Status = new SelectList(db.Account_Status, "Account_Status_ID",    "Account_Status_Nom", user.User_Status);
        ViewBag.User_Role = new SelectList(db.Role, "Role_Id", "Role_Name", user.User_Role);
        return View("edit");
    }

插入视图(仅密码部分)。在这里,我试图设置User_Password_confirm=User_Password的值,但失败了:(

<div class="form-group">
        @Html.LabelFor(model => model.User_Password, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.User_Password)
            @Html.ValidationMessageFor(model => model.User_Password)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.User_Password_Confirm, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.User_Password_Confirm, new { @Value = Model.User_Password })
            @Html.ValidationMessageFor(model => model.User_Password_Confirm)
        </div>
    </div>

mvc5表单验证更新失败

首先,我建议您创建两个不同的模型:例如UserCreateModel和UserUpdateModel。

然后你的代码会包含一些安全漏洞。如果我是用户Id 275,我可以更改表单中的用户Id(即使它是隐藏的),这样我就可以更改任何用户的电子邮件、密码、名字和姓氏。

您需要做的是获取登录用户的Id,并只更改已更改的数据。

if (ModelState.IsValid)
    {
        var userfromDb = db.Users.Find(loggedUser.EmployeeId);
        userfromDb .Email = user.Email;//etc...
        db.SaveChanges();
        return RedirectToAction("Index");
    }

通过插入,您可以很容易地看到所有模型验证错误的摘要

@Html.ValidationSummary

在您的视野中。