MVC5十进制?带小数分隔符的字段editfor

时间:2015-12-24 14:25:54

标签: asp.net-mvc cultureinfo

我的模态中有一个十进制字段。

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中设置了荷兰语设置。我怎样才能克服这个问题?

1 个答案:

答案 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...
}