TextBoxFor for decimal忽略逗号作为我的十进制分隔符尽管全球化设置为da-DK

时间:2018-06-04 15:00:50

标签: asp.net asp.net-mvc asp.net-mvc-5

我有一个简单的TextBoxFor,我在小数点上使用它。我的小数在我的viewmodel中被简单地定义为:

    [DisplayName("Beløb")]
    public decimal Amount { get; set; }

我在我的表单中使用它,使用:

    <div class="form-group row">
        @Html.LabelFor(c => c.Amount, new { @class = "col-lg-3 control-label text-lg-right pt-2" })
        <div class="col-lg-6">
            @Html.TextBoxFor(c => c.Amount, new { @class = "form-control" })
            @Html.ValidationMessageFor(c => c.Amount)
        </div>
    </div>

现在,在我的web.config中,我在system.web下设置了全球化:

<globalization culture="da-DK" uiCulture="da-DK" />

我的问题如下:

以下是我们如何在丹麦写一个数字:

500,50&lt; - 五百五十美分

如果我将此POST发送到服务器,则会忽略逗号,并且我的控制器会收到50050。

我在这里做错了什么?我认为web.config就足够了。

1 个答案:

答案 0 :(得分:0)

原来这是一个错误,StackOverflow上没有人能够修复,因为我没有提供完整的图片。我将在这里留下答案,以防万一其他人谷歌这个,这只是在绝望的时候再看一个地方。

错误发生在我的Global.asax中。我为小数设置了两个模型绑定器:

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());

我的代码是:

 public class DecimalModelBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext,
            ModelBindingContext bindingContext)
        {
            var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

            if (valueProviderResult.AttemptedValue.Equals("N.aN") ||
                valueProviderResult.AttemptedValue.Equals("NaN") ||
                valueProviderResult.AttemptedValue.Equals("Infini.ty") ||
                valueProviderResult.AttemptedValue.Equals("Infinity") ||
                    string.IsNullOrEmpty(valueProviderResult.AttemptedValue))
            {
                return 0m;
            }

            try
            {
                return Convert.ToDecimal(valueProviderResult.AttemptedValue, new CultureInfo("en-US"));
            }
            catch (Exception)
            {
                return 0m;
            }
        }
    }

解决这个问题之后,它才起作用。明显。我是个白痴;)