2010-03-15 13 views
8

मैं एक एमवीसी 2 ऐप में डेटान्नोटेशन का उपयोग कर रहा हूं और त्रुटि संदेशों के लिए RESX फ़ाइल संसाधनों का उपयोग करने का प्रयास करते समय थोड़ा निराश हूं।डेटाअनोटेशन और संसाधन अच्छी तरह से नहीं खेलते हैं

मैं निम्नलिखित लेकिन अपवाद हो रही रखने

[Required(ErrorMessage = Resources.ErrorMessages.Required)] 
[Required(ErrorMessageResourceName = Resources.ErrorMessages.Required, 
      ErrorMessageResourceType = typeof(Resources.ErrorMessages)] 

मुझे लगता है कि त्रुटि संदेश प्राप्त हो "एक विशेषता तर्क एक निरंतर अभिव्यक्ति, एक विशेषता पैरामीटर प्रकार की typeof अभिव्यक्ति या सरणी निर्माण अभिव्यक्ति होना चाहिए" की कोशिश की है जब तक कि मैं को Resources.ErrorMessages.Required के बजाय "आवश्यक" के साथ प्रतिस्थापित करता हूं।

क्या कोई मुझे बता सकता है कि मैं यह सही कर रहा हूं?

उत्तर

12

हां, अंत में आप क्या कर रहे हैं मूल रूप से सही है। ErrorMessageResourceName संसाधन का तात्पर्य है, नाम संसाधन का अर्थ है, संसाधन स्वयं ही नहीं।

Resources.ErrorMessages.Requiredवास्तविक (स्थानीयकृत) त्रुटि संदेश (संसाधन) के लिए अंक। संसाधन का संसाधन केवल "आवश्यक" है, और संसाधन प्रबंधक के टाइप करें (ErrorMessageResourceType के लिए उपयोग किया गया) वह वर्ग है जिसमें उस संसाधन में Resources.ErrorMessages कक्षा है।

तो अपने घोषणा इस तरह दिखना चाहिए:

[Required(ErrorMessageResourceType = typeof(Resources.ErrorMessages), 
    ErrorMessageResourceName = "Required")] 
public string Something { get; set; } 
+1

मैं सिर्फ बजाय त्रुटिसंदेश संपत्ति का उपयोग कर सकते हैं? मैं दृढ़ता से टाइप करना पसंद करता हूं .... – devlife

+4

@devlife: नहीं। अगर आप स्थानीयकरण चाहते हैं। यह वही है जो संसाधन गुणों के लिए हैं। असल में, यह किसी भी * स्थानीयकरण के साथ है, श्रृंखला में किसी बिंदु पर आपको नाम के आधार पर संसाधन स्ट्रिंग को देखना होगा, यह केवल बाहरी संसाधनों का काम करता है। और संसाधन संसाधन के आधार पर यह अभी भी "दृढ़ता से टाइप किया गया" है, आपके पास संसाधन नाम पर संकलन-समय सुरक्षा नहीं है। यदि आप इसे चाहते हैं, तो 'सार्वजनिक नाम स्ट्रिंग आवश्यक = "आवश्यक" जैसी लाइनों के साथ' संसाधन नाम 'जैसी कक्षा बनाएं, फिर आप उन्हें संसाधन नाम के रूप में निर्दिष्ट कर सकते हैं। – Aaronaught

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