tutorial net mvc entre diferencias asp asp.net-mvc-3

asp.net-mvc-3 - net - web forms c#



El archivador de modelo predeterminado de ASP.NET MVC 3 no enlaza las propiedades decimales (2)

Por alguna razón, cuando envío este JSON a una acción:

{"BaseLoanAmount": 5000}

que se supone que está vinculado a un modelo con una propiedad decimal llamada "BaseLoanAmount", no se une, simplemente se mantiene 0. Pero si envío:

{"BaseLoanAmount": 5000.00}

ata la propiedad, pero ¿por qué? ¿No se puede convertir 5000 a un evento decimal si no tiene números decimales?


Después de entrar en el código fuente de asp.net mvc, parece que el problema es que para la conversión asp.net mvc utiliza el convertidor de tipo de marco, que por algún motivo devuelve falso para una conversión de decimal a decimal, terminé usando un encuadernador de modelo personalizado proveedor y modelo de carpeta para decimales, puede verlo aquí:

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 }

Para registrar este ModelBinder, simplemente ponga la siguiente línea dentro de Application_Start() :

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder()); ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());


Intente enviarlo así:

{ "BaseLoanAmount": "5000" }