【问题标题】:How to add a new validation rule to mvcClientValidationMetadata?如何向 mvcClientValidationMetadata 添加新的验证规则?
【发布时间】:2012-11-14 13:02:08
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery validation asp.net-mvc-2


    【解决方案1】:

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

    要添加验证规则,您需要将此代码放在 BeginForm 的 &lt;% } %&gt; 关闭 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 在我们的系统中不能正常工作)。

    没有“Uncaught TypeError: Cannot call method 'push' of undefined”异常,因为 mvcClientValidationMetadata 是在 &lt;script&gt; 元素中生成的,而 &lt;% } %&gt; 所在的位置。

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      相关资源
      最近更新 更多