繁体   English   中英

自定义验证属性:将一个属性与另一个属性的内部属性进行比较

[英]Custom Validation Attribute: Comparing one property to another property's inner property

我有一个 class StarActivityModel,我想验证 StarChange 的输入值是否小于客户的 StarCount 属性。 为此,我尝试创建一个自定义验证属性,但在获取 StarCount 值时遇到了问题。

public class StarActivityModel : BaseModel
{
    [Display(Name = "App User")]
    public Client? Client { get; set; }

    [Display(Name = "Star Change")]
    public int? StarChange { get; set; }
}

public class Client 
{
    public virtual int StarCount { get; set; }

}

我对自定义验证属性的尝试

[AttributeUsage(AttributeTargets.Property)]
public class ValidStarChangeAttribute : ValidationAttribute
{
    private readonly string _comparisonProperty;

    public ValidStarChangeAttribute(string testedPropertyName)
    {
        _comparisonProperty = testedPropertyName;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var propertyInfo = validationContext.ObjectType.GetProperty(_comparisonProperty);
        
        //Compare passed StarCount and Client starcount
        if((int) value > //Somehow get client StarCount)
            return //Code an error message

        return ValidationResult.Success;
    }

}

 

您可以在 ValidationContex class 中搜索自定义 model 验证所需的方法和属性。 在此处输入图像描述

我修改了你的代码,它似乎运行良好

代码:

public class ValidStarChangeAttribute : ValidationAttribute
    {
        
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            StarActivityModel staractivemodel = (StarActivityModel)validationContext.ObjectInstance;
            if (value != null)
            {
            if((int)value< staractivemodel.Client.StarCount)
            {
                return ValidationResult.Success;
            }
            }
            return new ValidationResult("error");
        }

    }

结果: 结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM