十进制模型活页夹无法正常工作

时间:2015-12-20 00:35:07

标签: c# decimal globalization modelbinders custom-model-binder

我有一个自定义的DecimalModelBinder,它使用当前的文化读取小数。这是BindModel实现

public override object BindModel( ControllerContext controllerContext, ModelBindingContext bindingContext ) {
    var valueResult = bindingContext.ValueProvider.GetValue( bindingContext.ModelName );
    var modelState = new ModelState { Value = valueResult };
    object actualValue = null;
    try {
        if ( valueResult != null ) {
            actualValue = Convert.ToDecimal( valueResult.AttemptedValue, CultureInfo.CurrentCulture );
        }
        else {
            actualValue = Convert.ToDecimal( 0 );
        }
    }
    catch ( FormatException e ) {
        modelState.Errors.Add( e );
    }
    bindingContext.ModelState.Add( bindingContext.ModelName, modelState );
    return actualValue;
}

当正确编写数字时,此实现非常有效。 假设我们必须代表数字thirty-seventwenty-two

如果CurrentCultureen-US,则用户输入为37.22 如果currentCultureit-IT,则用户输入为37,22 (注意小数分隔符不同) 在这种情况下,模型绑定器工作得非常好。

但是,如果CurrentCultureit-IT且用户输入为37.22(就像美国文化一样),则数字会在3722,00中转换,因为该点是it-IT中的千位分隔符。

有没有办法纠正模型绑定器的代码以防止这些类型的错误?

0 个答案:

没有答案
相关问题