MVC远程验证 - 清除或设置其他字段错误

时间:2012-08-24 13:48:00

标签: asp.net-mvc reset clear remote-validation

我们在屏幕上有2个输入文本字段,它们的组合构成了一个有效的条目。我们正在对它们进行远程验证。

我们的ViewModel:

[Remote("IsExampleValid", "Validation", AdditionalFields = "Field2")]
public int Field1 { get; set; }

[Remote("IsExampleValid", "Validation", AdditionalFields = "Field1")]
public int Field2 { get; set; }

问题是这些仍然是单独的火,并不像我们需要那样真正地一起行动。例如,如果我在它们中输入错误数据以生成无效条目,那么它们都将出错。如果我更改Field2以生成有效组合,则将调用远程验证方法并将Field2标记为有效。但是,Field1仍然无效。 Field1应该是有效的,因为它们是组合。有没有更好的方法来构成组成有效组合的2个字段?

2 个答案:

答案 0 :(得分:2)

您可以使用这段令人敬畏的代码provided by Kiff

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("[id$="+fieldName+"]").change(function () {
                 if ($element.is(':enabled'))
                 {
                     // force re-validation to occur
                     $element.removeData("previousValue");

                     $element.valid();
                 }
            });
        });
    });
}

调用该函数:

$(document).ready(function() {
    initializeRemotelyValidatingElementsWithAdditionalFields($("form"));
});

注意:我调整了$form.find部分,以便在使用Editing a variable length list, ASP.NET MVC 2-style时它可以正常工作,在这种情况下,元素IDs具有前缀。我还添加了$element.is(':enabled')检查,以便只有在页面上当前启用了元素时才会触发验证。

答案 1 :(得分:0)

MVC远程验证 - 清除或设置其他字段错误

public int Field1 { get; set; }

    [Remote("IsExampleValid", "Validation", AdditionalFields = "Field1")]
    public int Field2 { get; set; }

这里的jquery代码

$('#Field1').on('change', function () {
       //code
        $('#Field2').removeData('previousValue');
    });

在远程验证检查无效后,它正在工作additionalField值