0
說我有類是這樣的:有沒有辦法讓FluentValidation停止處理其他規則,而無需爲所有規則設置CascadeMode?
public class ParentClass
{
public ChildClass Child { get; set; }
public DateTime Date { get; set; }
}
public class ChildClass
{
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
和驗證程序是這樣的:
public class ParentClassValidator : AbstractValidator<ParentClass>
{
public ParentClassValidator()
{
RuleFor(x => x.Child).NotNull();
RuleFor(x => x.Date).Must((parent, date) =>
date < parent.Child.EndDate && date > parent.Child.StartDate);
// ...other rules.
}
}
是否可以告訴FluentValidation停止檢查規則,如果第一個失敗(如兒童爲null) ,但運行所有其他規則,無論失敗如果通過?
即我真的希望是這樣的:
public ParentClassValidator()
{
RuleFor(x => x.Child).NotNull().StopOnFailure();
RuleFor(x => x.Date).Must((parent, date) => date < parent.Child.EndDate && date > parent.Child.StartDate);
// ...other rules.
}
我知道我可以設置CascadeMode = CascadeMode.StopOnFirstFailure,但將盡一切規則失敗終止檢查。說實話,在這種情況下,我只是想保存FluentValidation拋出一個異常,因爲它試圖訪問它已經知道爲null的parent.Child!
對於本示例,您應該可以使用[When](http://fluentvalidation.codeplex.com/wikipage?title=Customising&referringTitle=Documentation&ANCHOR#WhenUnless),但它需要重複驗證和驗證之間的非空檢查謂詞的時候。 –
Bleh。這不像是一個很乾淨的做法:(我懷疑這是唯一的方法,雖然。 – adhocgeek
我懷疑這也是:見http://fluentvalidation.codeplex.com/discussions/352581 –