我正在尝试使用流畅的验证为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;
}
答案 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;
}