0

我有一个表单,其中包含两个需要相等的字段(密码和密码确认)。我创建了一个类属性来检查它,并且在服务器端它工作得很好。在客户端,它什么也不做。我需要消息出现在 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方法在生成此表单之前执行。

下面你会找到我的问题的解决方案。

4

1 回答 1

0

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

要添加验证规则,您需要在<% } %>关闭using(...BeginForm 后立即放置此代码:

<% } %>

<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 在我们的系统中无法正常工作)。

没有“Uncaught TypeError: Cannot call method 'push' of undefined”异常,因为 mvcClientValidationMetadata 是在<script>元素 put where <% } %>is 中生成的。

于 2012-11-14T13:02:08.930 回答