使用远程验证进行多个字段验证

Guy*_*y Z 15 c# asp.net-mvc asp.net-mvc-3 remote-validation

我有以下型号:

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

    public string LastName {get; set;}

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

CardExisting操作将检查firstName和LastName的cardNumber组合是否存在现有记录.

如果用户首先输入卡号然后输入他的名字,我无法验证他怎么办?所以当他返回并输入他的名字时我需要再次进行远程验证,如果焦点已经从cardnumber属性丢失了怎么办呢?

Chr*_*ley 22

扩展了Jaluka的答案,我写了这个帮助器方法,找到每个具有"附加字段"的远程验证元素,然后在每次其中一个字段发生变化时触发所述元素的验证.

// 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();
            });
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

像这样调用函数:

$(document).ready(function() {
    initializeRemotelyValidatingElementsWithAdditionalFields($("#myFormId"));
});
Run Code Online (Sandbox Code Playgroud)


小智 5

我的工作方式是添加一些JavaScript.

$("#FirstName").change(function () {
        $('#CardNumber').removeData('previousValue');
        $('#CardNumber').valid();
  });
Run Code Online (Sandbox Code Playgroud)

因此,当更改名字时,您将清除卡号中的所有先前值并重新验证卡号.