我有一个像这样的简单模型:
[Validator(typeof(EntryModelValidator))]
public class EntryModel : BaseNopEntityModel
{
public virtual string ProductActionValue { get; set; }
}
我正在使用 FluentValidation 来验证模型的保存。问题是当用户在表单上保存值时,在某些情况下 ProductActionValue 需要保存为 int(它当然总是保存为字符串,但它需要可解析为 int)。
我有以下验证规则,可确保值不为空:
RuleFor(x => x.ProductCriteriaValue)
.NotEmpty()
.WithMessage(localizationService.GetResource("Common.FieldRequired"));
我尝试添加以下规则以验证为 int:
RuleFor(x => Int32.Parse(x.ProductCriteriaValue))
.GreaterThanOrEqualTo(1)
.When(x => (ProductCriteriaTypes)x.ProductCriteriaTypeId == ProductCriteriaTypes.ProductCreatedGreaterThanXDays || (ProductCriteriaTypes)x.ProductCriteriaTypeId == ProductCriteriaTypes.ProductCreatedLessThanXDays)
.WithMessage(localizationService.GetResource("Common.FieldRequired"));
但这只会引发 FluentValidation 运行时错误。有没有办法做到这一点?
提前感谢艾尔
更新以反映 AHMAD 的解决方案:
{
RuleFor(x => x.ProductCriteriaValue)
.Must(BeANumber)
.WithMessage(localizationService.GetResource("Common.FieldRequired"));
}
private bool BeANumber(string value)
{
int result;
if (Int32.TryParse(value, out result))
{
return result >= 1;
}
return false;
}