2012-05-26 22 views
5

के मामले में "मान {0} के लिए स्थानीयकरण अमान्य है" को DefaultModelBinder.ResourceClassKey निर्दिष्ट करके सत्यापन त्रुटियों के स्थानीयकरण के बारे में पढ़ा है, मूल रूप से यह int फ़ील्ड में स्ट्रिंग मान दर्ज करते समय या डेटाटाइम फ़ील्ड में डेटाटाइम नहीं होता है।इंट ओवरफ्लो

लेकिन जब मैं एक int फ़ील्ड के लिए "111111111111111111111111111111" टाइप कर रहा हूं तो मुझे System.OverflowException मिलता है और यह "The value '{0}' is invalid." जैसा दिखता है।

क्या स्थानीयकरण करने के लिए कोई तरीका है (उस संदेश को अन्य भाषाओं में अनुवाद करें) कि अन्य एमवीसी-सत्यापन के समान तरीके से सत्यापन त्रुटि?

public class IntModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     double parsedValue; 
     if (double.TryParse(value.AttemptedValue, out parsedValue)) 
     { 
      if ((parsedValue < int.MinValue || parsedValue > int.MaxValue)) 
      { 
       var error = "LOCALIZED ERROR MESSAGE FOR FIELD '{0}' HERE!!!"; 
       bindingContext.ModelState.AddModelError(bindingContext.ModelName, string.Format(error, value.AttemptedValue, bindingContext.ModelMetadata.DisplayName)); 
      } 
     } 
     return base.BindModel(controllerContext, bindingContext); 
    } 
} 

तो मैं बस इसे पंजीकृत: ModelBinders.Binders.Add(typeof(int), new IntModelBinder()); और यह अब ठीक काम करता है

उत्तर

3

मुझे एक ही समस्या थी, और अंततः मैं समाधान ढूंढने में कामयाब रहा। हां, वह संदेश स्थानीयकृत किया जा सकता है, और सौभाग्य से जब आप इसे समझते हैं तो यह बहुत आसान है।

आपको संसाधन फ़ाइल बनाना है और इसे App_GlobalResources फ़ोल्डर में रखना है। आप जो भी चाहें फ़ाइल को कॉल कर सकते हैं, लेकिन मैं आमतौर पर इसे एमवीसी वैलिडेशन मैसेज कहता हूं।

संसाधन फ़ाइल खोलें और InvalidPropertyValue नाम के साथ एक स्ट्रिंग बनाएं और मूल्य फ़ील्ड में जो भी संदेश आप चाहते हैं उसे लिखें।

अब, Global.asax फ़ाइल को खोलने और विधि Application_Start() में निम्न पंक्ति जोड़ें:

System.Web.Mvc.Html.ValidationExtensions.ResourceClassKey = "MvcValidationMessages"; 

"MvcValidationMessages" निश्चित रूप से अभी बनाए गए संसाधन फ़ाइल का सही नाम होना चाहिए।

और voíla! यही सब है इसके लिए। दिखाया गया संदेश अब डिफ़ॉल्ट के बजाय आपका स्वयं का होगा।

+0

यह कमाल है, धन्यवाद! बस चेक किया और यह काम करता है। :) – Shaddix

+0

बस इसे और अधिक जोर से इंगित करने के लिए ... 'System.Web.Mvc.Html.ValidationExtensions.ResourceClassKey' चाल है। धन्यवाद! – Zoka

0

मैं int के लिए ModelBinder अधिभावी और वहाँ एक स्थानीय त्रुटि संदेश की आपूर्ति समाप्त हो गया।

पीएस निश्चित रूप से, मेरे स्थानीयकृत त्रुटियों को मॉडल बाइंडर में हार्डकोड नहीं किया गया है, यह केवल एक सरलीकृत उदाहरण है :)

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