2015-10-13 72 views
1

我已經知道(在其他問題Using CascadeMode.StopOnFirstFailure on a validator level中已經很好地解釋了)Fluent驗證的級聯模型僅在規則級別工作,而不在驗證級別工作。第一次失敗後流利的驗證停止

我有這樣的任務:

RuleFor(x => x.Name) 
    .NotNull() 
    .Length(1, 128) 
    .Must(ChkInput); 

When(x => x.CompanyName != "..." ,() => 
{ 
    RuleFor(x => x) 
      ... 
}); 

我不想驗證第二RuleFor如果在第一有錯誤。基本上,因爲我正在驗證頁面中的輸入字段,我更願意逐個顯示錯誤。

我沒有辦法將第一個驗證規則與第二個驗證規則合併,因爲有不同的概念,通過相同的頁面獲得,但不同。

所以我想了解的是這樣的: 只有當第一條規則不失敗時,纔有辦法啓動第二條驗證規則? 或者,也許我沒有正確使用流利的驗證,即使我從同一頁中檢索我的所有參數,我必須將它們分開,並使用兩個(或更多,基於概念的數量)不同的驗證器?

回答

0

您可以使用私有局部變量添加.When(ThisIsTheFirstFailure)規則,但如果您使用單身驗證程序,則不會運行

例如

RuleFor(x => x.Name) 
    .NotNull() 
    .Length(1, 128) 
    .Must(ChkInput); 

When(x => x.CompanyName != "..." ,() => 
{ 
    RuleFor(x => x.Abc) 
     .When(ThisIsTheFirstFailure) 
     ... 
    RuleFor(x => x.Def) 
     .When(ThisIsTheFirstFailure) 
     ... 
}); 
0

我有類似的問題。我有兩種類型的驗證錯誤,只有在第一組中沒有錯誤的情況下,我纔想顯示第二組錯誤。爲了達到這個目的,我將兩組不同的錯誤分隔成不同的驗證類,並且僅當第一個類沒有錯誤返回時才調用第二類。

相關問題