在重写GetClientValidationRules时如何访问要比较的值?

时间:2013-11-22 01:16:14

标签: asp.net-mvc validation fluentvalidation

我正在尝试使用流畅的验证为angularjs编写客户端验证器。我使用了Darin Dimitrov here概述的方法。一切正常,但我无法弄清楚如何访问我在验证规则中设置的值。我需要这个,所以我可以让我的角度指令为我验证这个值。

有什么想法吗?感谢。

这是我的规则:

RuleFor(m => m.dropDownListId).GreaterThan(0).WithMessage("Required");

这是我的覆盖代码:

public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!ShouldGenerateClientSideRules()) yield break;

            var formatter = new MessageFormatter().AppendPropertyName(Rule.PropertyName);
            var message = formatter.BuildMessage(Validator.ErrorMessageSource.GetString());

           var rule = new ModelClientValidationRule
            {
                ValidationType = VALIDATIONTYPE,
                ErrorMessage = message
            };

            //CompareAttribute is deprecated and I can't figure out the new syntax
            //also 'MemberToCompare' is always null
            rule.ValidationParameters["greaterthan"] = CompareAttribute.FormatPropertyForClientValidation(validator.MemberToCompare.Name);

            //what I am trying to do is
            rule.ValidationParameters.Add("greaterthan", "the value I setup in my rule");

            yield return rule;
        }

1 个答案:

答案 0 :(得分:0)

我讨厌回答我自己的问题,特别是当我错过了明显的问题时,这可能对某人有所帮助。

因为'GreaterThan'验证了一个数字,你需要使用Validator.ValueToCompare。咄。

这是正确的方法。

 public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
        {
            if (!ShouldGenerateClientSideRules()) yield break;

            var validator = Validator as GreaterThanValidator;
            if(validator == null)
                throw new ArgumentException("greaterThanValidator");

            var valueToCompare = validator.ValueToCompare;
            var formatter = new MessageFormatter().AppendPropertyName(Rule.PropertyName);
            var message = formatter.BuildMessage(Validator.ErrorMessageSource.GetString());

           var rule = new ModelClientValidationRule
            {
                ValidationType = VALIDATIONTYPE,
                ErrorMessage = message
            };

            rule.ValidationParameters.Add("min", valueToCompare);

            yield return rule;
        }