Après avoir consulté le code source d'asp.net mvc, il semble que le problème soit que pour la conversion, asp.net mvc utilise le convertisseur de type du framework, qui pour une raison quelconque renvoie faux pour une conversion d'int en décimal, j'ai fini par utiliser un fournisseur de modèle de liaison personnalisé et un modèle de liaison pour les décimales, vous pouvez le voir ici :
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
}
Pour enregistrer ce ModelBinder, il suffit de mettre la ligne suivante à l'intérieur Application_Start()
:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());