2013-01-20 16 views
5

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

मेरे मॉडल में कई फ़ील्ड के लिए शून्य प्रकार हैं जो खाली हो सकते हैं। इसमें नलिकाएं, युगल और दशमलव हैं। मेरे पास एक नियमित रूप है जिसमें इन गुणों में से प्रत्येक के लिए टेक्स्टबॉक्स हैं, और वे सभी रिक्त (खाली स्ट्रिंग) के लिए डिफ़ॉल्ट हैं। जब यह फ़ॉर्म वापस मेरे कंट्रोलर एक्शन पर सभी रिक्त फॉर्म मानों के साथ पोस्ट किया जाता है, और यह मेरे मॉडल से जुड़ा हुआ है, तो खाली युगल और दशमलव 0 के रूप में दिखाई देते हैं, और खाली इंट्स शून्य होते हैं।

ऐसा लगता है कि एक खाली फॉर्म मान पास होने पर सभी शून्य प्रकारों को डिफ़ॉल्ट रूप से शून्य करना चाहिए, लेकिन यदि यह मामला नहीं है, तो यह बहुत असंगत लगता है कि युगल और दशमलव को इनट्स से अलग माना जाता है।

+0

:: फिर

public class NullableDecimalBinder : IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); ModelState modelState = new ModelState { Value = valueResult }; object result = null; if (valueResult.AttemptedValue.Length > 0) { try { // Bonus points: This will bind using the user's current culture. result = Convert.ToDecimal(valueResult.AttemptedValue, System.Globalization.CultureInfo.CurrentCulture); } catch (FormatException e) { modelState.Errors.Add(e); } catch (InvalidOperationException e) { modelState.Errors.Add(e); } } bindingContext.ModelState.Add(bindingContext.ModelName, modelState); return result; } } 

, इसका इस्तेमाल करने, इस लाइन अपने Global.asax के Application_Start में जोड़ने के लिए जब आप अपने मॉडल का दृष्टांत, इससे पहले कि इसके लिए बाध्यकारी, उस समय आपके नामुमकिन युगल और decimals क्या मूल्य है? –

+0

यदि आप कोड पोस्ट कर सकते हैं तो यह सहायक होगा। –

उत्तर

4

यह समस्या एमवीसी 4 में हल हो रही है, क्योंकि मैं समस्या को पुन: पेश नहीं कर सका। मेरे खाली टेक्स्टबॉक्स सभी null को मेरे मॉडल के शून्य, int, या दशमलव पर वापस बांधते हैं। कोई बात नहीं। तो समस्या कहीं और हो सकती है, या यह संभव है कि यह एमवीसी 3 में एक बग होता था और अब नहीं है।

यह कहा गया है कि, यदि आप अभी भी समस्या का सामना कर रहे हैं और एमवीसी 4 का उपयोग नहीं कर सकते हैं, तो अपने स्वयं के कस्टम मॉडल बाइंडर्स को वही करने के लिए प्रयास करें जो आपको करना है। यहाँ दशमलव के लिए एक उदाहरण से एक है: बस बंद मौका पर

ModelBinders.Binders.Add(typeof(decimal?), new NullableDecimalBinder()); 
संबंधित मुद्दे