2011-11-24 12 views
6

मैं डेटा एनोटेशन के साथ MVC 3 में एक क्षेत्र को मान्य कर रहा हूँ:क्या एमवीसी 3 में स्ट्रिंग लम्बाई वैधकर्ता को रनटाइम मान प्रदान करना संभव है?

[StringLength(50, MinimumLength=5)] 
public string MyText { get; set; } 

वहाँ एक गतिशील मूल्य प्रदान करने के लिए एक रास्ता है? कुछ ऐसा:

[StringLength(50, MinimumLength=GetMinimumLengthValueFromDb())] 
public string MyText { get; set; } 

मेरा अंतिम उपाय दूरस्थ सत्यापनकर्ता का उपयोग करना है। अगर मुझे StringLength के साथ ऐसा करने का कोई तरीका नहीं मिलेगा, तो मैं RemoteValidator का उपयोग करूंगा।

+1

मैं स्ट्रिंगलेन एट्रिब्यूट क्लास का विस्तार करता हूं, डीबी से डिफ़ॉल्ट को पुनः प्राप्त करने के लिए केवल कन्स्ट्रक्टर को ओवरराइड करता हूं। – BigMike

उत्तर

7

नहीं, केवल स्थिर मानों को संकलित करें, जैसे स्थिरांक, गुणों के लिए प्रदान किए जा सकते हैं। यह सीमा सभी सी # विशेषताओं पर लागू होती है और डेटा एनोटेशन विशेषताओं के लिए विशिष्ट नहीं है, लेकिन StringLengthAttribute के मामले में यह दर्शाता है कि रनटाइम पर एक अलग लंबाई प्रदान करने का तरीका है।

आपको किसी अन्य प्रकार की सत्यापन का उपयोग करने की आवश्यकता होगी या StringLengthAttribute से विरासत में प्राप्त एक कस्टम विशेषता बनाना होगा जो Type स्वीकार करता है और उस प्रकार के विधि को लंबाई मान के स्रोत के रूप में स्वीकार करता है। यह दृष्टिकोण CustomValidationAttribute द्वारा उपयोग किए गए एक जैसा होगा जो सत्यापन के स्रोत के रूप में ValidatorType और Method नाम स्वीकार करता है।

+0

धन्यवाद। मैंने आपके द्वारा वर्णित तरीके से सत्यापन लागू किया - स्ट्रिंग लम्बाईएट्रिब्यूट से विरासत में मिला और इसे स्थानांतरित किया और डीबी –

+0

से कस्टम न्यूनतम लंबाई मान लेने के लिए तर्क जोड़ा गया 'कस्टम सत्यापन' एट्रिब्यूट 'पर इंगित करने के लिए धन्यवाद! मैं पूरी तरह से भूल गया था :-) – Oliver

+1

@ valerii.sverdlik: क्या आपके द्वारा उपयोग किए गए कोड को साझा करना संभवतः संभव है? – Thijs

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