2011-11-15 21 views
5

Projemde Fluent Validation kullanıyorum.
ViewModel'imde type dizgisi olan bir özellik var, geçerli değerler yalnızca pozitif tamsayıları temsil eden dizedir.
Yani, bir IntegerValidator basit bir dize, bir tamsayıya ayrıştırılabilir olup olmadığını denetler. Bu çalışıyor.
Sorun, kuralı nasıl pozitif tamsayı olacak şekilde eklemektir? Varolan Greater Than Validator kullanmak istiyorum, ancak string özniteliğimin kuralına zincirleme, string ile karşılaştırıldı, ayrıştırılmış int olarak değil. Bunu nasıl başarabilirim? ...Birbirine bağlı olan zincirleme kuralları

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

Bu gerçekten anlamlıdır! Ancak, ToInt'in rolünün ne olduğunu merak ediyorum. Gördüğüm gibi, RuleBuilder 'nu bir' RuleBuilder 'haline getirmeli ve doğrulanmış değerin doğrulama zamanında' int' olarak değiştirildiğinden emin olmalıdır. Ancak ... yöntem zinciri bir RuleBuilder 'döndürmelidir. Sağ? Yani, bir 'int' kuralları ('GreaterThan' gibi) 'int' doğrulama yapmak için bir 'dize 'rulebuilder döndürmek için bir yol olmalıdır. Bunun, FluentValidation'ın mevcut yeteneklerinin ötesine geçmesinden korkuyorum. –

+0

@GertArnold: “ToInt” çok fazla mantıklı değil, bence. Aslında umrumda değil * nasıl * işe yarayacak *, * “GreaterThan” ı kullanabilirim ve bir int “GreaterThan” a geçebilir. –

+0

Tamam, temel nokta şu ki, Akıcı Doğrulama'nın mevcut zihniyetinde kavramsal sorun olabilir. –

cevap

1

Hep özel yöntemi kullanabilirsiniz

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

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

Az tekrar kullanılabilirlik ama çalışacak ...: ben yapmak istiyorum ne

Numune (ToInt() dikkat edin)

+0

Elbette, bunu sorgulamadan yapabilirim. Ama tam olarak bu yüzden kaçınmak istediğim şey ve neden ilk etapta sordum :) –

+0

'RuleBuilder ' 'bir' RuleBuilder ' için kullanmanın bir yolunu bulamıyorum. Bu sınıfların hiyerarşisi, FluentValidator'un kodunda derin bir değişiklik gerektirir, ancak bunlardan bahsetmiştim; Benzer kullanım durumlarını görebiliyorum. Bu özel durumda (size başka bir cevap vermemek için), her zaman dizgede negatif bir işareti kontrol eden bir doğrulayıcıyı zincirleyebilirsiniz. ;) – drharris