我的模态中有一个十进制字段。
public partial class MyModel
{
public decimal? BudgetAantalDecimal { get; set; }
}
我在
的表单中显示了这个@Html.EditorFor(model => model.BudgetAantalDecimal, new { htmlAttributes = new { @class = "form-control decimal-small inline" } })
当我填写值100时,字段将填入模型中。当我填写值100.66时,我的模型中的值为null。
当我将语言设置从荷兰语更改为美国格式时,我可以使用值100.66。我的客户在Windows中设置了荷兰语设置。我怎样才能克服这个问题?
答案 0 :(得分:1)
当涉及到小数时,您需要添加自定义模型绑定器来处理不断变化的标点符号。 This blog逐步进行,但我会在此处重新创建一些内容,以防链接中断。
首先,您需要创建活页夹:
public class DecimalModelBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var modelState = new ModelState { Value = valueResult };
var actualValue = null;
try {
actualValue = Convert.ToDecimal(valueResult.AttemptedValue,
CultureInfo.CurrentCulture);
}
catch (FormatException e) {
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}
之后,您需要做的就是将其添加到您的配置中,以便了解它:
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
// All that other stuff you usually put in here...
}