0

等しくする必要がある2つのフィールド(パスワードとパスワードの確認)を持つフォームがあります。これを確認するためにクラス属性を作成しましたが、サーバー側ではうまく機能します。クライアント側では何もしません。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

最悪の場合は、まったく同じコードを実行することです。既存のルールを上書きします。

検証ルールを追加するには、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>

propertyMustMatch関数は、指定されたフィールドが等しいかどうかをチェックします(jQuery equalToはシステムで正しく機能しませんでした)。

「UncaughtTypeError:Undefinedのメソッド'push'を呼び出せません」という例外はありません。これは、mvcClientValidationMetadataが<script>要素putに生成されるため<% } %>です。

于 2012-11-14T13:02:08.930 に答える