0

私はMVC2アプリを持っており、クライアント側の検証を使用しています。フォームには、フィールドがデータベースから動的に構築される部分があります。合計フィールド(数値)であると想定されるすべてのフィールドに対して、クライアント側の検証も許可したいと思います。

そこで、検証コードの大きな塊を取り、一致するステートメントを作成しました

//<![CDATA[
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push({ "Fields":
        [{ "FieldName": "<%= id %>", "ReplaceValidationMessageContents": true, "ValidationMessageId": "<%= id %>_validationMessage", "ValidationRules":
            [{ "ErrorMessage": "You must enter an <%= id %>", "ValidationParameters": {}, "ValidationType": "required" },
                { "ErrorMessage": "The <%= id %> must be more than $0.00", "ValidationParameters": { "minimum": 0.01, "maximum": 1.7976931348623157E+308 }, "ValidationType": "range" },
                { "ErrorMessage": "The field <%= id %> must be a number.", "ValidationParameters": {}, "ValidationType": "number" }
        ]}], "FormId": "new-creditcard-form", "ReplaceValidationSummary": false, "ValidationSummaryId": "CreditCardSummary"
});

//]]>

これによりエラーは発生しません。ただし、ページが読み込まれると、データの注釈/コントロールによって生成された検証のみが表示されます。私が想定しているのは、検証がスタックにプッシュされ、サーバーで生成された検証がスタックの最後であり、検証に使用されている項目が1つだけで、最後の項目がオン/最初の項目がオフであるというエラーです。

これを正しく機能させる方法はありますか?

編集:

__MVC_EnableClientValidation検証フィールドを作成したMicrosoftMvcJQueryValidation.cs直後にあるというメソッドを呼び出すと、他の検証定義が無視されることを発見しました。どういうわけか、大きな検証フィールド定義に検証を挿入する必要があります。が__MVC_EnableClientValidation呼び出されると、それらすべてが一度に登録されます。

4

1 に答える 1

0

私はこれを理解しました。splice代わりに使用する必要がありましたpush

<% if (Model.HasCustomValidation) { %>
//<![CDATA[
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.splice(0,0,{ "Fields":
        [{ "FieldName": "<%= id %>", "ReplaceValidationMessageContents": true, "ValidationMessageId": "<%= id %>_validationMessage", "ValidationRules":
            [
                <% if (Model.EnableTotalledValidation) { %>
                    { "ErrorMessage": "The <%= Model.Column.Name %> in row <%= Model.RowNumber %> cannot be empty.", "ValidationParameters": {}, "ValidationType": "required" },
                    { "ErrorMessage": "The <%= Model.Column.Name %> in row <%= Model.RowNumber %> must be a number.", "ValidationParameters": {}, "ValidationType": "number" }
                <% } %>

                <% if(Model.EnableTotalledValidation && (Model.EnableRegexValidation || Model.EnableLengthValidation)) { %>
                    ,
                <% } %>

                <% if(Model.EnableRegexValidation) { %>
                    {"ErrorMessage":"<%: Model.Column.ClientSideRegexErrorMessage %>","ValidationParameters":{"pattern":"<%: Model.Column.ClientSideRegex %>"},"ValidationType":"regularExpression"}
                <% } %>
            ]
        }], "FormId": "new-creditcard-form", "ReplaceValidationSummary": false, "ValidationSummaryId": "CreditCardSummary"
});
//]]>

<% } %>
于 2011-05-19T14:50:53.810 に答える