我遇到了一个情况。
我们有MVC3应用程序并使用数据注释进行客户端验证。除了由于服务器端验证而回发页面后的比较属性,一切正常。
我使用比较属性确认密码字段来验证密码。第一次加载页面时,它可以正常工作。
提交页面后,如果服务器端的业务验证失败,则会回发页面。现在,由于页面被回发,所以“密码”和“确认密码”字段都被删除。我在“密码”字段中输入值,该值与我在回发页面之前输入的值不同。和“确认密码”字段中的相同新值。
在这种情况下,比较验证属性会尝试根据在页面回发之前输入的旧密码值对其进行验证,但不会将其与新添加的密码进行比较。
这是一个我们陷入困境的奇怪问题。
以下是我在用户模型中使用的内容:
<Required(ErrorMessage:="You must specify a password")> _
<DataType(DataType.Password)> _
<Remote("ValidatePassword", "Account")>
Public Property Password() As String
<DataType(DataType.Password)> _
<Compare("Password", ErrorMessage:="The new password and confirm password do not match.")>
Public Property ConfirmPassword() As String
在我的视图中,我只是在ajax表单下显示控件和验证消息,如:
@Html.Password("Password", "", New With {.size = "30", .maxlength = "30"}) @Html.ValidationMessageFor(Function(model) model.Password)
@Html.Password("ConfirmPassword", "", New With {.size = "30", .maxlength = "30"}) @Html.ValidationMessageFor(Function(model) model.ConfirmPassword)
fyi,我使用控件的局部视图,单击提交按钮时只刷新部分视图。