TextBoxFor для десятичного игнорирования запятой в качестве моего десятичного разделителя, несмотря на глобализацию, установленную в da-DK - PullRequest
0 голосов
/ 04 июня 2018

У меня есть простой TextBoxFor, который я использую с десятичной дробью.Моя десятичная дробь просто определяется следующим образом в моей модели представления:

    [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 <- пятьсот пятьдесят центов </p>

Если я отправлю это на сервер, запятая будет проигнорирована, и мой контроллер получит 50050.

Что я здесь не так делаю?Я думал, что web.config будет достаточно.

1 Ответ

0 голосов
/ 07 июня 2018

Оказывается, это была ошибка, которую никто в 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;
            }
        }
    }

После исправления это просто сработало.Очевидно.Я идиот;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...