16

私は次のモデルを持っています:

public class Customer
{
    public string FirstName {get;set;}

    public string LastName {get; set;}

    [Remote("CardExisting", "Validation", AdditionalFields="FirstName,LastName")
    public string CardNumber {get; set;}
}

CardExisting アクションは、firstName と LastName の cardNumber の組み合わせの既存のレコードがあることを確認します。

ユーザーが最初にカード番号を入力してから名前を入力した場合、私は彼を検証できないので、彼が戻って彼の名前を入力したときに、再度リモート検証する必要があります。

4

4 に答える 4

23

Jalukaの回答を拡張して、「追加フィールド」を持つ各リモート検証要素を見つけ、それらのフィールドの1つが変更されるたびにその要素の検証を開始するこのヘルパーメソッドを作成しました。

// I hate naming things
function initializeRemotelyValidatingElementsWithAdditionalFields($form) {
    var remotelyValidatingElements = $form.find("[data-val-remote]");

    $.each(remotelyValidatingElements, function (i, element) {
        var $element = $(element);

        var additionalFields = $element.attr("data-val-remote-additionalfields");

        if (additionalFields.length == 0) return;

        var rawFieldNames = additionalFields.split(",");

        var fieldNames = $.map(rawFieldNames, function (fieldName) { return fieldName.replace("*.", ""); });

        $.each(fieldNames, function (i, fieldName) {
            $form.find("#" + fieldName).change(function () {
                // force re-validation to occur
                $element.removeData("previousValue");
                $element.valid();
            });
        });
    });
}

次のように関数を呼び出します。

$(document).ready(function() {
    initializeRemotelyValidatingElementsWithAdditionalFields($("#myFormId"));
});
于 2013-07-19T13:52:31.043 に答える
6

これを機能させる方法は、JavaScript を追加することです。

$("#FirstName").change(function () {
  $('#CardNumber').removeData('previousValue');
  $('#CardNumber').valid();
});

そのため、名が変更された場合、カード番号から以前の値をすべてクリアし、カード番号を再検証します。

于 2012-04-17T04:11:03.573 に答える
4

クライアント スクリプトを作成したくない場合:

    public class Customer
    {
        [Remote("CardExisting", "Validation", AdditionalFields = "CardNumber,LastName")]
        public string FirstName { get; set; }
        [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,CardNumber")]
        public string LastName { get; set; }
        [Remote("CardExisting", "Validation", AdditionalFields = "FirstName,LastName")]
        public string CardNumber { get; set; }
    }

CardExisting ですべてのフィールドが入力されているかどうかを検証します

于 2015-03-15T20:39:18.250 に答える