Ответ 1
После перехода в исходный код asp.net mvc, кажется, проблема в том, что для преобразования asp.net mvc использует конвертер типа framework, который по какой-то причине возвращает 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());