我有一个表格,其中两个字段需要相同(密码和密码确认)。我创建了一个类属性来检查它,在服务器端它运行良好。在客户端它什么都不做。我需要在ValidationSummary中显示该消息(“密码重复”需要与“密码”相同)。
我意识到检查这些字段的最简单方法是手动将规则添加到window.mvcClientValidationMetadata。我试图这样做,但没有任何效果。
我的代码:
<% using (Html.BeginForm("ResetPassword", "Account", FormMethod.Post}))
{ %>
<%= Html.ValidationSummary() %>
<div>
<%= Html.ValidationMessageFor(m => m.Email)%>
<%= Html.LabelFor(m => m.Email)%>
</div>
<div>
<%= Html.TextBoxFor(m => m.Email)%>
<% Html.ValidateFor(m => m.Email);%>
</div>
<div>
<%= Html.ValidationMessageFor(m => m.PasswordModel.Password)%>
<%= Html.LabelFor(m => m.PasswordModel.Password)%>
</div>
<div>
<%= Html.PasswordFor(m => m.PasswordModel.Password)%>
</div>
<div>
<%= Html.ValidationMessageFor(m => m.PasswordModel.PasswordRepeated)%>
<%= Html.LabelFor(m => m.PasswordModel.PasswordRepeated)%>
</div>
<div>
<%= Html.PasswordFor(m => m.PasswordModel.PasswordRepeated)%>
</div>
<div>
<%= Html.ValidationMessageFor(m => m.PasswordModel.PasswordRepeated)%>
<%= Html.LabelFor(m => m.PasswordModel.PasswordRepeated, true)%>
</div>
<% } %>
在生成此表单之前执行 Html.EnableClientValidation
方法。
下面你会找到解决我问题的方法。
答案 0 :(得分:0)
您可能做的最糟糕的事情是执行相同的代码 - 您将覆盖现有规则。
要添加验证规则,您需要在<% } %>
关闭BeginForm的using(...
后立即放置此代码:
<% } %>
<script type="text/javascript">
window.mvcClientValidationMetadata[0]["Fields"].push( //check if the '0' is number corresponding to your form validation metadata
{
"FieldName": "PasswordModel.PasswordRepeated", // name attribute of the element
"ReplaceValidationMessageContents": false,
"ValidationMessageId": "PasswordModel_PasswordRepeated_validationMessage", //id of the ValidationMessageFor (if needed)
"ValidationRules":
[
{
"ErrorMessage": 'Password repeated needs to be the same as Password',
"ValidationParameters": "#PasswordModel_Password", //'params' parameter in your validation function, can be an object
"ValidationType": "propertiesMustMatch" //name of the validation function placed in $.validator.methods
}
]
}
);
</script>
propertiesMustMatch函数检查给定的字段是否相等(jQuery equalTo在我们的系统中无法正常工作)。
没有“未捕获的TypeError:无法调用方法'推送'未定义的”异常,因为mvcClientValidationMetadata是在放置<script>
的{{1}}元素中生成的。