2011-11-15 13 views
5

मैं अपनी परियोजना में Fluent Validation का उपयोग कर रहा हूं।
मेरे व्यूमोडेल में मेरे पास एक ऐसी प्रॉपर्टी है जो टाइप स्ट्रिंग है, मान्य मान केवल स्ट्रिंग सकारात्मक पूर्णांक का प्रतिनिधित्व करते हैं।
तो, मैंने एक साधारण IntegerValidator बनाया है जो यह जांचता है कि स्ट्रिंग को पूर्णांक में पार्स किया जा सकता है या नहीं। यह काम।
समस्या यह है कि नियम कैसे जोड़ना है कि यह एक सकारात्मक पूर्णांक होना चाहिए? मैं मौजूदा Greater Than Validator का उपयोग करना चाहता हूं, लेकिन मेरी स्ट्रिंग प्रॉपर्टी के लिए इसे नियम में जोड़ना इसे string के रूप में तुलना करेगा, न कि int के रूप में। इसे कैसे प्राप्त करें? मैं करना चाहते हैं क्या कीचेनिंग नियम जो एक दूसरे पर निर्भर करते हैं

नमूना (ध्यान दें ToInt()):

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

यह वास्तव में समझ में आता है! हालांकि, मुझे आश्चर्य है कि ToInt की भूमिका क्या होनी चाहिए। जैसा कि मैंने इसे देखा है, इसे 'नियमबिल्डर ' को 'नियमबिल्डर ' में परिवर्तित करना चाहिए और यह सुनिश्चित करना है कि सत्यापित मान सत्यापन समय पर 'int' में परिवर्तित हो। लेकिन ... विधि श्रृंखला को 'नियमबिल्डर ' वापस करना चाहिए। सही? इसलिए, 'int' सत्यापन करने के लिए लगातार 'int' नियमों (जैसे' ग्रेटरथान') को निर्देशित करने का एक तरीका होना चाहिए, लेकिन 'स्ट्रिंग' नियमबिल्डर को वापस कर दें। मुझे डर है कि यह FluentValidation की वर्तमान क्षमताओं से परे है। –

+0

@GertArnold: ठीक है, 'ToInt' बहुत अधिक समझ में नहीं आता है, मुझे लगता है। मुझे वास्तव में परवाह नहीं है कि यह कैसे काम करेगा, बस * मैं * मैं 'ग्रेटर थान' का उपयोग कर सकता हूं और यह कि एक 'ग्रेटर थान' को पास किया जाता है। –

+0

ठीक है, मेरा मुख्य बिंदु यह है कि फ्लुएंट सत्यापन की वर्तमान मानसिकता में यह वैचारिक समस्या हो सकती है। –

उत्तर

1

तुम हमेशा एक कस्टम विधि का उपयोग कर सकता है ...

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

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

कम पुनर्प्रयोग लेकिन काम करेगा ...

+0

निश्चित रूप से, मैं बिना सवाल किए, ऐसा कर सकता हूं। लेकिन यह वही है जो मैं टालना चाहता हूं और मैंने पहले स्थान पर क्यों पूछा :) –

+0

मुझे 'नियमबिल्डर ' को 'नियमबिल्डर ' पर कोई रास्ता नहीं मिल सकता है। उन वर्गों के पदानुक्रम को फ्लुएंटविलिएटर के कोड में गहरा परिवर्तन की आवश्यकता होती है, लेकिन एक मैं उनसे उल्लेख करता हूं; मैं समान उपयोग के मामलों को देख सकता हूं। इस विशेष मामले में (आपको एक और गैर-उत्तर देने के लिए), आप हमेशा एक वैधकर्ता को चेन कर सकते हैं जो स्ट्रिंग में ऋणात्मक चिह्न की जांच करता है। ;) – drharris

संबंधित मुद्दे

 संबंधित मुद्दे