目前我有模型 FooModel
public class FooModel
{
[Range(0.001, 10000, ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]
[RangeValidator("BarMax")]
public decimal? Bar { get; set; }
public decimal BarMax { get; set; }
}
根据建议,我创建了一个自定义范围验证器
public class RangeValidator : ValidationAttribute
{
private readonly string dependentPropery;
public RangeValidator(string dependentpropery)
: base()
{
this.dependentPropery = dependentpropery;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
System.Reflection.PropertyInfo property = validationContext.ObjectType.GetProperty(this.dependentPropery);
if (property == null)
{
return new ValidationResult(string.Format("Unknown Property {0}", this.dependentPropery));
}
var value1 = property.GetValue(validationContext.ObjectInstance, null) as decimal?;
if (!value1.HasValue)
{
return null;
}
decimal actualValue;
if (value == null)
{
return new ValidationResult("Value can not be empty.");
}
decimal.TryParse(value.ToString(), out actualValue);
if (actualValue <= 0)
{
return new ValidationResult(string.Format("{0} Value can not be empty.", this.dependentPropery));
}
return actualValue > value1.Value ? new ValidationResult(string.Format("Value cannot exceed {0} {1}.", this.dependentPropery, value1.Value)) : null;
}
}