我为我的数据库用户表创建了一个模型类。我的数据库表没有确认密码字段。但我的班级有它。
public class User
{
[Key]
public int id { get; set; }
[Required]
public string password{ get; set; }
[Compare("password", ErrorMessage = "Re-Type password!")]
[NotMapped]
public string confirmPassword { get; set; }
}
我的插入表单在html razor中有confirmPassword文本框用于比较,因为我需要它。
<div class="form-group">
@Html.LabelFor(m => m.confirmPassword , new { @class = "control-label" })
@Html.TextBoxFor(m => m.confirmPassword , new { @class = "form-control"})
<h5 class="text-danger">@Html.ValidationMessageFor(m=> m.confirmPassword )</h5>
</div>
但是我的更新表格在html中没有得到confirmPassword文本框。因此,当我发布更新表单时,ModelState.IsValid始终为false。我如何使用比较文本字段只插入表单?因为我不需要在更新表单中使用confirmPassword字段。
谢谢。
答案 0 :(得分:2)
您应该使用不同的ViewModels
进行插入和更新操作。这样您就可以在后期操作时拥有(并验证)自己的插入/更新属性。
否则,您可以在检查ModelState.Remove("confirmPassword");
之前使用ModelState.IsValid
(在更新后期操作中)从模型验证中删除特定属性,以便不会在该属性上触发验证。
答案 1 :(得分:0)
如果你有一个不同的形式,实际上需要一个不同的
ViewModel
(不同的数据验证要求,必填字段等),然后您可以为该视图创建不同的视图模型类。
例如,创建一个名为UserUpdate的类(不包含确认密码字段),并根据需要将其映射到域实体。