0

現在、私はモデル 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;
    }
} 
4

1 に答える 1