繁体   English   中英

FluentValidation无法用于null属性

[英]FluentValidation not working for a null property

我正在将FluentValidationIDataErrorInfo FluentValidation使用,并且有一个定义如下的验证器:

public class StsInfoValidator : AbstractValidator<StsInfo>
{
    public StsInfoValidator()
    {
        RuleFor(x => x.SomeProperty).Cascade(CascadeMode.StopOnFirstFailure)
            .NotNull().NotEmpty().WithMessage("SomeProperty is required.");

    }        
}

但是,传递null属性似乎不会触发验证程序:

#region IDataErrorInfo

public string this[string columnName]
{
    get
    {

        var validator = new StsInfoValidator();

        if (columnName.Equals("SomeProperty"))
        {
            // SomeProperty below is null
            if (validator.Validate(this, SomeProperty).Errors.Any())
                return validator.Validate(this, CampusNexusApiServer).Errors.FirstOrDefault().ErrorMessage;
            else
            {
                validator = null;
                return string.Empty;
            }
        }

        return string.Empty;
    }
}

#endregion

您遇到的问题是,如果您选择使用需要lambda表达式评估您的属性的Validate重载,则必须执行以下操作:

代替:

validator.Validate(this, SomeProperty);

你需要:

validator.Validate(this, s => s.SomeProperty);

这里这个重载文档:

在此处输入图片说明

或者,您可以使用其他Validate重载并将属性名称作为字符串传递:

validator.Validate(this, columnName); validator.Validate(this, "SomeProperty");

这是Validate的属性名称重载:

在此处输入图片说明

    public string this[string columnName]
    {
        get
        {

            var validator = new StsInfoValidator();

            if (columnName.Equals("SomeProperty"))
            {
                // SomeProperty below is null
                //option 1
                var result  = validator.Validate(this,s => s.SomeProperty);
                //option 2
                //var result  = validator.Validate(this, columnName);
                //option 3
                //var result  = validator.Validate(this, "SomeProperty");
                if (result.Errors.Any())
                    return validator.Validate(this, CampusNexusApiServer).Errors.FirstOrDefault().ErrorMessage;
                else
                {
                    validator = null;
                    return string.Empty;
                }
            }

            return string.Empty;
        }
    }

暂无
暂无

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

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