2个属性的浮动范围Asp .Net Core之间的自定义验证

时间:2019-06-19 11:30:57

标签: c# validation asp.net-core-2.2

我在模型中具有这两个属性

public class Geometria
{
    public int Id { get; set; }

    public string Componente { get; set; }

    [Range(0, float.MaxValue)]   
    public float ToleranciaInferior { get; set; }

    [Range(0,float.MaxValue)]
    public float ToleranciaSuperior { get; set; }     
}

属性ToleranciaSuperior不能与ToleranciaInferior相同或相等。

如何通过注释实现这一目标?

1 个答案:

答案 0 :(得分:1)

将自定义验证逻辑放入视图模型本身会更加方便,除非您发现自己在多个视图模型上执行此操作。

public class Geometria : IValidatableObject
{
    public int Id { get; set; }

    public string Componente { get; set; }

    [Range(0, float.MaxValue)]   
    public float ToleranciaInferior { get; set; }

    [Range(0,float.MaxValue)]
    public float ToleranciaSuperior { get; set; }     

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (ToleranciaInferior == ToleranciaSuperior) 
        {
            yield return new ValidationResult(
                "Your error message", 
                new string[] { 
                    nameof(ToleranciaInferior), nameof(ToleranciaSuperior) 
                });
        }
    }
}