2013-02-21 27 views
8

मैं निम्नलिखित कोड था की अभिव्यक्ति या सरणी निर्माण अभिव्यक्ति:ASP.NET MVC4: एक विशेषता तर्क, एक निरंतर अभिव्यक्ति होना चाहिए typeof एक विशेषता पैरामीटर प्रकार

[Required(ErrorMessage = MessageModel.translateMessage("required")))] 
    [Display(Name= MessageModel.translateMessage("id"))] 
    public string user_id { get; set; } 

मैं त्रुटि संदेश गतिशील बनाने के लिए कोशिश कर रहा हूँ लेकिन मैं त्रुटि .:

"An attribute argument must be a constant expression , typeof expression or array creation expression of an attribute parameter type."

संकलित इस समस्या के लिए कोई समाधान मिल सकता है?

+0

इस प्रश्न को देखें: http://stackoverflow.com/questions/3814866/dynamic-parameters-for-attributes –

+1

जो एरिक लिपर्ट द्वारा पोस्ट की ओर जाता है: http://blogs.msdn.com/b/ericlippert/ संग्रह/200 9/02/02/गुण-बनाम-विशेषताएँ .aspx –

+0

[सी # गतिशील विशेषता तर्क] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1093466/c-sharp-dynamic-attribute-arguments) – jgauffin

उत्तर

3

त्रुटि संदेश कहता है "एक विशेषता तर्क निरंतर अभिव्यक्ति होना चाहिए ..."।

इसका मतलब है कि DisplayName विशेषता का तर्क निरंतर अभिव्यक्ति (जैसे एक स्ट्रिंग, पूर्णांक, आदि), या त्रुटि संदेश में सूचीबद्ध अन्य अभिव्यक्ति प्रकारों में से एक होना चाहिए।

आप एक विशेषता है कि है.अगर आप ASP.Net 4 का उपयोग कर रहे समर्थन की जरूरत है आप तो एक संपत्ति स्थानीय बनाना चाहते हैं तो DisplayAttribute इस तरह होना चाहिए:

[Display(Name="ID",Resource=typeof(MessageModel.translateMessage("id")))] 
public string user_id { get; set; } 

इसके अलावा डैरिन

से इस answer की जाँच करें
+1

अनुवाद मैसेज ("आईडी") एक प्रकार नहीं है, इसलिए मुझे लगता है कि यह काम नहीं करता है – MiaoWin

9

सबसे पहले आप संसाधन बनाते हैं .resx फ़ाइल में आपके स्थानीय तार होंगे।

जब आप विशेषता घोषित करते हैं तो आपने संसाधन प्रकार तर्क सेट किया है। यह नाम, शॉर्टनाम और वर्णन तर्कों को किसी मान के बजाय संसाधन कुंजी के रूप में उपयोग करने का कारण बनता है।

[Display(Name = "GenreName", ShortName = "GenreShortName", Description = "GenreDescription", ResourceType = typeof(MyResources))] 
public string Genre { get; set; } 
2

बहुत देर से प्रतिक्रिया दे रहा है।

डेटाअनोटेशन पैरामीटर मानों को स्थिरांक, वास्तविक तारों की आवश्यकता होती है। तो, आप यहां कोई विधि नहीं लिख सकते हैं। क्या आपको किसी भी प्रकार के स्थानीयकरण की आवश्यकता है, फिर संसाधन फ़ाइल बनाएं। फिर इस तरह कुछ कोड लिखें। संसाधन फ़ाइल में "आवश्यक फ़ील्ड" और "ईमेल" कुंजी बनाई गई हैं और "ViewModelResource" संसाधन फ़ाइल का नाम है।

[Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof(ViewModelResource))] 
[Display(Name = "Email", ResourceType=typeof(ViewModelResource))] 
public string Email{ get; set; } 

यदि आप शर्तों पर कस्टम संदेश चाहते हैं तो अपने स्वयं के "कस्टम डेटा एन्नोटेशन" बनाएं, शर्तों पर निर्भर करता है।