2011-11-15 55 views
5

我在我的項目中使用了Fluent Validation
在我的ViewModel中,我有一個字符串類型的屬性,有效值只是表示正整數的字符串。
所以,我創建了一個簡單的IntegerValidator,它檢查字符串是否可以被解析爲一個整數。這工作。
問題是,如何添加它必須是正整數的規則?我想使用現有的Greater Than Validator,但將它鏈接到我的字符串屬性的規則將它作爲string比較,而不是解析的int。如何實現這一目標?我想做些什麼相互依賴的鏈接規則

樣品(注意ToInt()):

RuleFor(x => x.BatchNumber).SetValidator(new IntegerValidator()) 
          .ToInt().GreaterThan(0); 
+0

這真的很有道理!但是,我想知道ToInt的作用是什麼。正如我所看到的,它應該將'RuleBuilder '轉換成'RuleBuilder ',並確保在驗證時驗證值被轉換爲int。但是......方法鏈應該返回一個'RuleBuilder '。對?因此,必須有一種方法來指示連續的'int'規則(比如'GreaterThan')執行'int'驗證,但返回一個'string'規則構建器。我擔心這超出了FluentValidation的當前功能。 –

+0

@GertArnold:好吧,我想,'ToInt'沒有太大意義。我其實不在乎*它將如何工作,只是*我可以使用'GreaterThan'並且將int傳遞給'GreaterThan'。 –

+0

好的,我的主要觀點是,在目前Fluent驗證的思維模式下,它可能是概念上的問題。 –

回答

1

你總是可以使用自定義的方法...

RuleFor(x=>x.BatchNumber).Must(BeAPositiveIntegerString); 

private bool BeAPositiveIntegerString(string batchNumber) 
{ 
    // check both parse ability and greater than (once parsed) 
} 

較少的可重用性,但會工作...

+0

當然,我可以做到這一點,毫無疑問。但這正是我想要避免的,爲什麼我首先要求:) –

+0

我無法找到將'RuleBuilder '投射到'RuleBuilder '的方法。這些類的層次結構需要對FluentValidator的代碼進行深層次的更改,但我會提及它們;我可以看到類似的用例。在這種特殊情況下(爲了給你另一個不答案),你總是可以鏈接一個驗證器來檢查字符串中的負號。 ;) – drharris