Javascript 如何向mvcClientValidationMetadata添加新的验证规则?

Javascript 如何向mvcClientValidationMetadata添加新的验证规则?,javascript,jquery,validation,asp.net-mvc-2,Javascript,Jquery,Validation,Asp.net Mvc 2,我有一个表单,其中有两个字段需要相等(密码和密码确认)。我已经创建了一个class属性来检查这一点,在服务器端它工作得很好。在客户端,它什么也不做。我需要消息出现在ValidationSummary中(“密码重复”需要与“密码”相同) 我意识到检查这些字段的最简单方法是手动将规则添加到window.mvcClientValidationMetadata。我试着这么做,但没有任何效果 我的代码: <% using (Html.BeginForm("ResetPassword", "Accou

我有一个表单,其中有两个字段需要相等(密码和密码确认)。我已经创建了一个class属性来检查这一点,在服务器端它工作得很好。在客户端,它什么也不做。我需要消息出现在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>
<% } %>

m、 电子邮件)%%>
m、 电子邮件)%%>
m、 电子邮件)%%>
m、 电子邮件);%%>
m、 PasswordModel.Password)%%>
m、 PasswordModel.Password)%%>
m、 PasswordModel.Password)%%>
m、 PasswordModel.PasswordRepeated)%%>
m、 PasswordModel.PasswordRepeated)%%>
m、 PasswordModel.PasswordRepeated)%%>
m、 PasswordModel.PasswordRepeated)%%>
m、 PasswordModel.PasswordRepeated,true)%%>
Html.EnableClientValidation
方法在生成此表单之前执行


下面您将找到我的问题的解决方案。

您可能会做的最糟糕的事情是执行相同的代码-您将覆盖现有规则

若要添加验证规则,您需要将此代码放在关闭
后,然后使用(…
)命令:

<% } %>

<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>

window.mvcClientValidationMetadata[0][“字段”]。push(//检查“0”是否是与表单验证元数据对应的数字
{
“FieldName”:“PasswordModel.PasswordRepeated”,//元素的name属性
“ReplaceValidationMessageContents”:false,
“ValidationMessageId”:“PasswordModel\u PasswordRepeated\u validationMessage”,//ValidationMessageFor的id(如果需要)
“验证规则”:
[
{
“ErrorMessage”:“重复的密码需要与密码相同”,
“ValidationParameters”:“#PasswordModel_Password”//“params”参数在验证函数中可以是一个对象
“ValidationType”:“propertiesMustMatch”//位于$.validator.methods中的验证函数的名称
}
]
}
);
propertiesMustMatch函数检查给定字段是否相等(jQuery equalTo在我们的系统中无法正常工作)

不存在“未捕获类型错误:无法调用未定义”异常的方法“push”,因为mvcClientValidationMetadata是在
元素put中生成的,其中