默认的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" }
- Razor:声明式HTML帮助程序
- ASP.NET MVC3部分视图命名约定
- 用于DataAnnotationvalidation属性的Int或Number DataType
- ASP.NET:在应用程序的预启动初始化阶段不能调用此方法
- 在ASP.NET MVC中阻止使用属性进行特定操作的caching
- 如何使用ASP.NET MVC ViewModels knockout.js?
- asp.net mvc3返回原始html来查看
- jquery.validate.unobtrusive不能使用dynamic注入的元素
- Autofac – InstancePerHttpRequest与InstancePerLifetimeScope