Я только что наткнулся на это снова через 2 года.Я думал, что ASP.NET MVC 5 решил эту проблему, но похоже, что это не так.Итак, здесь описывается, как решить проблему.
Создайте класс с именем DecimalModelBinder, как показано ниже, и добавьте его в корневой каталог вашего проекта, например:
using System;
using System.Globalization;
using System.Web.Mvc;
namespace YourNamespace
{
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = valueResult };
object actualValue = null;
if(valueResult.AttemptedValue != string.Empty)
{
try
{
actualValue = Convert.ToDecimal(valueResult.AttemptedValue, CultureInfo.CurrentCulture);
}
catch(FormatException e)
{
modelState.Errors.Add(e);
}
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}
}
Внутри Global.asax.cs, используйте это в Application_Start()
как это:
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());