After going to asp.net mvc source code, the problem seems to be that for converting asp.net mvc uses a framework type converter that for some reason returns false to convert int to decimal conversion, I ended up using a binder provider custom and model binder for decimal places, you can see here:
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 }
To register this ModelBinder, simply enter the following line inside Application_Start() :
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder()); ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
ryudice Apr 22 '11 at 20:32 2011-04-22 20:32
source share