2010-06-14 21 views
13

App_GlobalResources निर्देशिका में एक resx फ़ाइल का उपयोग करके, मैं मॉडल सत्यापनकर्ताओं की PropertyValueInvalid स्ट्रिंग के लिए डिफ़ॉल्ट संदेश बदलने में सक्षम हूं।Asp.Net MVC 2 - PropertyValueRequired स्ट्रिंग को बदलना

लेकिन यह संदेश का अनुवाद करने से काम नहीं करता है जब एक मूल्य की आवश्यकता है (PropertyValueRequired।)

Global.asax.cs Application_Start में() मैं इस तरह संसाधन वर्ग कुंजी बदल दिया है,:

DefaultModelBinder.ResourceClassKey = "Messages"; 

और Messages.resx फाइलों में मैं दो प्रविष्टियों डाल दिया है:

  • "PropertyValueInvalid" => "। हे वीरता '{0}' ई inválido पैरा ओ कैंपो {1}"
  • "PropertyValueRequired" => "É needário digitar o {0}।"

धन्यवाद।

+0

की तरह जोड़ने मैं एक ही व्यवहार देखा है। समाधान किसी को भी? – mare

+0

@mare आपकी सटीक समस्या क्या है - PropertyValueRequired संदेश का उपयोग डेटा एनोटेशन का उपयोग करके मोडल सत्यापन में resx फ़ाइल से नहीं किया जा रहा है? – swapneel

+0

हां, बिल्कुल डैनियल के मुद्दे के रूप में। – mare

उत्तर

9

यह संदेश System.ComponentModel.DataAnnotations असेंबली में RequiredAttribute_ValidationError के अंतर्गत असेंबली है।

public class MyViewModel 
{ 
    [MyRequired] 
    public int Foo { get; set; } 
} 
: इस कस्टम विशेषता के साथ अपने दृश्य मॉडल संपत्ति को सजाने

Required => É necessário digitar o {0}. 

और अंत में:

public class MyRequiredAttribute : RequiredAttribute 
{ 
    public MyRequiredAttribute() 
    { 
     ErrorMessageResourceType = typeof(Messages); 
     ErrorMessageResourceName = "Required"; 
    } 
} 

और फिर अपने Messages.resx फाइल के अंदर Required स्ट्रिंग को परिभाषित: आप एक कस्टम मान्यता विशेषता लिख ​​सकता है

+0

तो उसी अवधारणा के लिए एएसपी।नेट एमवीसी टीम दो अलग-अलग संरचनाओं का उपयोग कर रही है? – mare

+0

@mare, हम केवल उम्मीद कर सकते हैं कि यह एमवीसी के भविष्य के संस्करणों में तय/आसान हो जाएगा। –

+1

एएसपी.नेट एमवीसी 3 में क्लाइंट-साइड पर काम करने के लिए आपको कस्टम एट्रिब्यूट (http://stackoverflow.com/a/5954452/169) पंजीकृत करना होगा या विशेषता एडाप्टर दृष्टिकोण (http: // stackoverflow) का उपयोग करना होगा। com/एक/5,207,912/169)। –

0

कैसे

[Required (ErrorMessageResourceName="Required",ErrorMessageResourceType=typeof(Messages)] 

public string Foo { get; set; } 

Required => É necessário digitar o {0}. 

या

Required => {0} field is required. 

कृपया पूरा asp.net MVC के स्थानीयकरण गाइड asp.net mvc localisation guide

+0

इसे वैश्विक बनाने के लिए कैसे करें (इसे ErrorMessageResourceName = "आवश्यक", ErrorMessageResourceType = typeof (संदेश) या फ़ील्ड के लिए त्रुटि संदेश बनाने के लिए एक पूर्णांक मूल्य की आवश्यकता नहीं है, लेकिन उपयोगकर्ता 'abc' –

+0

में प्रवेश नहीं करता है इसका मतलब क्या है - इसे वैश्विक बनाएं लेकिन पूर्णांक मान त्रुटि संदेश के लिए - क्या इससे मदद मिलती है? http://stackoverflow.com/questions/9522369/how-use-data-annotations-for-verifying-input-particular-type – swapneel

17

RequiredAttribute DefaultModelBinder.GetValueRequiredResource इस्तेमाल नहीं किया के लिए लिंक नीचे देखें। कस्टम डेटाअनोटेशन मॉडल validator क्लास बनाएँ।

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter 
{ 
    public MyRequiredAttributeAdapter(ModelMetadata metadata, 
            ControllerContext context, 
            RequiredAttribute attribute) 
     : base(metadata, context, attribute) 
    { 
    attribute.ErrorMessageResourceType = typeof (Messages); 
    attribute.ErrorMessageResourceName = "PropertyValueRequired"; 
    } 
} 

और ग्लोबल.एक्सएक्स में एडाप्टर पंजीकृत करें।

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute), 
    typeof(MyRequiredAttributeAdapter)); 

इस सहायता की आशा करें!

Reusable Validation Error Message Resource Strings for DataAnnotations

+2

+ 1 यह वही है जो मैं खोज रहा हूं, धन्यवाद! (पीएस: लिंक टूटा हुआ है) – mateuscb

+0

यह बहुत अच्छा काम करता है! –

+0

यह सबसे अच्छा जवाब है जो मैंने इस विषय पर पाया है – Laguna

0

बस इस

[Required(ErrorMessage = "Your Error Message, here..!")]