【发布时间】:2014-11-01 21:38:06
【问题描述】:
我一直在做一个基于 mvc5 的项目。 我在我的模型类上应用了表单验证。 “比较”条件适用于 User_password 和 User_Password_Confirm。它在插入时完美运行。但是当我必须更新同一客户端 bt 的信息而不是密码时,在这种情况下,我的 MoldeStat.Valid 为“假”,因为我认为这是因为密码的“比较”条件。
谁能告诉我如何解决这个问题? 我遇到了“更新”的问题。
提前感谢您的帮助
我的模型类
[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>
【问题讨论】:
-
您可以做的第一件事是 ModelState.Values.SelectMany(x => x.Errors).Aggregate(String.Empty, (current, error) => current + (error.ErrorMessage + "\ n"));在模型中显示所有错误:)
-
我认为错误很明显。请参阅“Isnert”时,我有两个字段“密码”和“确认密码”(确认密码不在数据库表中)。所以我的模型可以比较两个领域的附加值。但是在更新时,我不显示密码。所以默认情况下“确认密码”的值为空。
标签: c# validation passwords asp.net-mvc-5