[英]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.