Asp.net mvc 不同客户端属性更改上的自定义ValidationAttribute触发器

Asp.net mvc 不同客户端属性更改上的自定义ValidationAttribute触发器,asp.net-mvc,validation,data-annotations,Asp.net Mvc,Validation,Data Annotations,我已经构建了一个自定义验证属性-lesstHandDifference。基本上我给它两个属性,它检查验证字段的值是否小于两个属性名的差值。基本上是“现场C

我已经构建了一个自定义验证属性-lesstHandDifference。基本上我给它两个属性,它检查验证字段的值是否小于两个属性名的差值。基本上是“现场C<(现场A-现场B)”。那部分有效

IsValid函数工作正常,下面是我的客户端验证规则。(额外问题-有没有办法获取第一个操作数和第二个操作数的显示名称?它具有按属性参数指定的属性名称。)

public IEnumerable GetClientValidationRules(ModelMetadata元数据,ControllerContext上下文)
{
var规则=新ModelClientValidationRule
{
ValidationType=“lesstHandDifference”,
ErrorMessage=FormatErrorMessage(metadata.GetDisplayName())
};
rule.ValidationParameters.Add(“第一个操作数”,第一个操作数);
rule.ValidationParameters.Add(“第二个操作数”,第二个操作数);
收益率-收益率规则;
}
我完全搞不懂的是,如果A(第一个操作数)或B(第二个操作数)发生更改,如何触发验证

$.validator.addMethod(
'lessthandifference',
function (value, element, params) {
    var firstVal = $('#' + params.firstoperand).val();
    var secondVal = $('#' + params.secondoperand).val();
    return (value <= (firstVal - secondVal));
});

$.validator.unobtrusive.adapters.add(
    'lessthandifference', ['firstoperand', 'secondoperand'], function (options) {
        var params = {
            firstoperand: options.params.firstoperand,
            secondoperand: options.params.secondoperand
        };
        options.rules['lessthandifference'] = params;
        options.messages['lessthandifference'] = options.message;

    //Set up Trigger?
});
$.validator.addMethod(
“较小的差异”,
函数(值、元素、参数){
var firstVal=$(“#”+params.firstOperator.val();
var secondVal=$('#'+params.secondoperand.val();

返回(值I解决了主要问题:

function addSecondaryValidatorCheck(mainElement, secondaryElement) {
    $(secondaryElement).change(function () {
        if ($(mainElement).val() > 0)
            $(mainElement).valid();
    });
和$.validator.unobtrusive.adapters.add函数的实现

addSecondaryValidatorCheck('#' + options.element.id, '#' + options.params.compareAttribute);

仍在寻找传递显示名称的好方法。

我一直在努力解决类似的问题,我正在尝试通过更改依赖属性触发验证,而不必对依赖属性本身应用属性。例如,如果您将DateA与DateB进行比较,并将属性应用于DateB并提供DateA作为注入属性。我希望它在用户修改DateB或DateA字段时验证DateB。
addSecondaryValidatorCheck('#' + options.element.id, '#' + options.params.compareAttribute);