[英]FluentValidation not working for a null property
我正在将FluentValidation
与IDataErrorInfo
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.