2010-02-01 11 views
7

मैं अपने मॉडल ऑब्जेक्ट्स को सत्यापित करने के लिए System.ComponontModel.DataAnnotations का उपयोग कर रहा हूं। मैं संदेश मानक गुणों (आवश्यक और स्ट्रिंग लम्बाई) उत्पादन को कैसे प्रतिस्थापित कर सकता हूं, उनमें से प्रत्येक को त्रुटि संदेश प्रदान करने या उन्हें उप-वर्गीकृत करने के बिना?मानक डेटा एन्नेशन त्रुटि संदेशों को कैसे बदलें

उत्तर

8

नई पोस्ट लिखना क्योंकि मुझे टिप्पणियों की तुलना में अधिक स्वरूपण की आवश्यकता है।

पर देखें सत्यापन प्रमाणीकरण - सत्यापन गुणों का आधार वर्ग।

तो मान्यता त्रुटि हो गई, त्रुटि संदेश विधि द्वारा बनाया जाएगा: संपत्ति ErrorMessageString पर

public virtual string FormatErrorMessage(string name) 
{ 
    return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, new object[] { name }); 
} 

अगला देखो:

:

protected string ErrorMessageString 
{ 
    get 
    { 
     if (this._resourceModeAccessorIncomplete) 
     { 
      throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, DataAnnotationsResources.ValidationAttribute_NeedBothResourceTypeAndResourceName, new object[0])); 
     } 
     return this.ResourceAccessor(); 
    } 
} 

संपत्ति ResourceAccessor से setted किया जा सकता है

ValidationAttribute..ctor(Func<String>) 
ValidationAttribute.set_ErrorMessage(String) : Void 
ValidationAttribute.SetResourceAccessorByPropertyLookup() : Void 

इसका पहला उपयोग संदेशों को प्रारूपित करने के लिए बिल्कुल संरक्षित वर्गों द्वारा किया जाता है, दूसरा - जब हम त्रुटि संदेश गड़बड़ त्रुटि संदेश संपत्ति सेट करते हैं, और तीसरा - संसाधन संसाधनों का उपयोग करते समय। आपकी स्थिति के आधार पर, आप त्रुटि मैसेज रिसोर्सनाम का उपयोग कर सकते हैं।

कहीं और चलो हमारे उदाहरण के लिए, व्युत्पन्न कंस्ट्रक्टर्स को देखो, रेंज विशेषता:

internal static string RangeAttribute_ValidationError 
{ 
    get 
    { 
     return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture); 
    } 
} 

तो तुम अलग टैन के लिए संसाधन फ़ाइल बना सकते हैं:

private RangeAttribute() 
    : base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError)) 
{ 
} 

यहाँ RangeAttribute_ValidationError संसाधन से भरी हुई है डिफ़ॉल्ट संस्कृति और संदेशों को ओवरराइट करें, इस तरह:

http://www.codeproject.com/KB/aspnet/SatelliteAssemblies.aspx

http://msdn.microsoft.com/en-us/library/aa645513(VS.71).aspx

+0

बहुत बहुत धन्यवाद Veton। आपके द्वारा वर्णित अंतिम भाग में मैंने पूरी तरह से याद किया है। –

+6

मैं समझ नहीं पा रहा हूं कि संसाधन फ़ाइलों को डेटाएनोटेशन.dll से संसाधन प्रबंधक को ओवरराइड करने के लिए कैसे नामित किया जाना चाहिए (और कहां रखा गया)। – wRAR

6

आप सभी DataAnnotations प्रमाणकों के लिए आधार वर्ग ValidationAttribute की त्रुटिसंदेश संपत्ति का उपयोग कर सकते हैं।

उदाहरण के लिए:

[Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}")] 
public int id; 

शायद यह मदद करेंगे।

+3

सच। लेकिन क्या एक बार में डिफ़ॉल्ट संदेश को प्रतिस्थापित करने का कोई तरीका है? –

+1

@ फ़िट्जच्यित्ट्जाकी क्या आपने कभी इसे हासिल किया था? –

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