我如何使用MVC比较属性只插入表单

时间:2016-01-22 09:22:57

标签: c# asp.net-mvc model-view-controller

我为我的数据库用户表创建了一个模型类。我的数据库表没有确认密码字段。但我的班级有它。

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字段。

谢谢。

2 个答案:

答案 0 :(得分:2)

您应该使用不同的ViewModels进行插入和更新操作。这样您就可以在后期操作时拥有(并验证)自己的插入/更新属性。

否则,您可以在检查ModelState.Remove("confirmPassword");之前使用ModelState.IsValid(在更新后期操作中)从模型验证中删除特定属性,以便不会在该属性上触发验证。

答案 1 :(得分:0)

如果你有一个不同的形式,实际上需要一个不同的 ViewModel(不同的数据验证要求,必填字段等),然后您可以为该视图创建不同的视图模型类。

例如,创建一个名为UserUpdate的类(不包含确认密码字段),并根据需要将其映射到域实体。