默认的ASP.NET MVC 3模型绑定器不绑定十进制属性

出于某种原因,当我发送这个JSON到一个动作:

{"BaseLoanAmount": 5000} 

这应该绑定到一个名为“BaseLoanAmount”的小数属性的模型,它不绑定,它只是保持0.但是,如果我发送:

 {"BaseLoanAmount": 5000.00} 

它绑定的财产,但为什么? 5000不能被转换成一个小数的事件,如果它没有十进制数字?

进入asp.net mvc的源代码后,似乎问题是,对于转换asp.net mvc使用框架的types转换器,出于某种原因返回false为int到十进制转换,我结束了使用自定义模型绑定小数点的提供者和模型联编程序,你可以在这里看到:

 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()); 

尝试像这样发送:

 { "BaseLoanAmount": "5000" }