我将一些数据从客户端发布到服务器,如下所示
$.post(url, myData)
.done(function (data) {
});
这里是控制人员的行动
public class MyModel
{
decimal Precision { get; set; }
}
[HttpPost]
public ActionResult PostInfo(MyModel postBack)
{
}
当我使用英语文化 PostInfo 按预期工作但是当我将文化更改为西班牙语并且精确度 = 1,2时,我收到以下错误
值1,2对精度
无效
有人可以告诉我为什么默认模型绑定器在 CurrentCulture 是西班牙语时无法解析1,2?
我在 _Layout.cshtml 中更改了文化。它仅用于测试目的。
@{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("es", "ES");
}
答案 0 :(得分:0)
我最后一次检查时,默认的模型绑定器不处理国际化格式。你必须自己动手。
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
var valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
var modelState = new ModelState { Value = valueResult };
object actualValue = null;
try
{
//Check if this is a nullable decimal and a null or empty string has been passed
var isNullableAndNull = (bindingContext.ModelMetadata.IsNullableValueType &&
string.IsNullOrEmpty(valueResult.AttemptedValue));
//If not nullable and null then we should try and parse the decimal
if (!isNullableAndNull)
{
actualValue = decimal.Parse(valueResult.AttemptedValue, NumberStyles.Any, CultureInfo.CurrentCulture);
}
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}