我试图使用FluentValidation验证三个字段中只有一个具有值.
RuleFor(x => x.Date1)
.Must(x => !x.HasValue)
.When(x => x.Date2.HasValue || x.Date3.HasValue)
.WithMessage("Select only one of Date 1, Date 2 and Date 3");
其他2个日期重复此操作.正如所料,这会产生匹配的每条规则的消息.
还有其他规则,所以有没有办法执行其他规则,但在这三个中的第一个失败?我已经看到我可以在全球范围内设置CascadeMode.StopOnFirstFailure,但我希望这三个规则之外的其他规则能够像现在一样工作.
解决方法:
我决定沿着另一条路走下去.它感觉很优雅,但我知道它是否通过了代码审查.
我创建了一个新属性
public IEnumerable<DateTime?> MutuallyExclusiveDates
{
get
{
return new List<DateTime?>()
{
Date1,
Date2,
Date3
};
}
}
然后我添加了这个规则
RuleFor(x => x.MutuallyExclusiveDates)
.Must(x => x.Count(d => d.HasValue) <= 1)
.WithMessage("Select only one of Date 1, Date 2 and Date 3");
标签:c,fluentvalidation 来源: https://codeday.me/bug/20190528/1171055.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。