asp.net MVC के के स्रोत कोड में कदम के बाद, यह seemsd समस्या रूपांतरण asp.net MVC के लिए ढांचे के प्रकार कनवर्टर, का उपयोग करता है जो किसी कारण से दशमलव रूपांतरण के लिए एक पूर्णांक के लिए झूठी देता है, मैं एक कस्टम मॉडल बांधने की मशीन प्रदाता और दशमलव के लिए मॉडल बांधने की मशीन का उपयोग कर समाप्त हो गया है, आप इसे यहाँ देख सकते हैं:
public class DecimalModelBinder : DefaultModelBinder
{
#region Implementation of IModelBinder
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (valueProviderResult.AttemptedValue.Equals("N.aN") ||
valueProviderResult.AttemptedValue.Equals("NaN") ||
valueProviderResult.AttemptedValue.Equals("Infini.ty") ||
valueProviderResult.AttemptedValue.Equals("Infinity") ||
string.IsNullOrEmpty(valueProviderResult.AttemptedValue))
return 0m;
return Convert.ToDecimal(valueProviderResult.AttemptedValue);
}
#endregion
}
इस ModelBinder रजिस्टर करने के लिए, बस Application_Start()
अंदर निम्न पंक्ति डाल:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
'वापसी' में बूलियन अभिव्यक्ति कथन 'valueProviderResult == null' सत्य का मूल्यांकन नहीं कर सकता है, क्योंकि इससे पहले 'valueProviderResult.AttemptedValue' एक शून्य-अपवाद अपवाद फेंक देगा। – Diego
नोट: फिल हैक यह भी सिफारिश करता है, http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx –
मैं वास्तव में इस समस्या के लिए आपके मूल समाधान का उपयोग कर रहा हूं - धन्यवाद! एक मुद्दा: दशमलव के लिए नियत nulls? फ़ील्ड को इसके बजाय शून्य असाइन किया जाता है। मैं अंततः टाइप के डिफ़ॉल्ट मान को असाइन करना है या नहीं, यह निर्धारित करने के लिए 'valueProviderResult.RawValue == null' की जांच के साथ चला गया। – Matt