Редактирование в MVC3 для десятичных полей и локализация

В моем языковом стандарте для десятичного разделителя используется запятая ,, а не точка ..

В MVC3, когда я открываю окно редактирования, где десятичные значения отображаются с

@Html.EditorFor(model => model.MyDecimalVal)

значение отображается правильно.

Когда я ввожу значение с запятой, я получаю сообщение об ошибке «Значение не является числом», а если я ввожу значение с точкой, я не получаю ошибки, но на самом деле значение не сохраняется.

Как справиться с этой ситуацией?


person bzamfir    schedule 12.11.2011    source источник


Ответы (2)


Как справиться с этим путем настройки логики проверки уже было объяснено, так что вот другой подход.

Поместите приведенный ниже код в файл web.config под узлом <system.web>, если вы хотите установить культуру на en. Он позаботится о десятичном разделителе:

<globalization culture="en-US" uiCulture="en" />

Я не уверен, но для DateTime вы по-прежнему привязаны к языку вашего сервера.

person tugberk    schedule 12.11.2011
comment
Спасибо, это позаботилось как о форматах даты и времени, так и о числовых форматах (но заставило их использовать локаль) - person bzamfir; 15.11.2011
comment
@bzamfir правильно. Я называю этот подход временным решением. Постоянное исправление должно было настроить локали вашего сервера. - person tugberk; 15.11.2011
comment
Как вообще это решение - принуждение культуры к английскому языку? - person gangelo; 26.11.2012
comment
@gangelo, когда конечный пользователь не заботится о конкретной культуре, я чертовски уверен, что это чертовски хорошее решение! - person tugberk; 27.11.2012
comment
Это просто потрясающе. Ты спас мне день, спасибо. - person MikkaRin; 19.06.2015

В этом сообщении блога рекомендуется переопределить правила проверки числа и диапазона jQuery по умолчанию, чтобы включить поддержку на стороне клиента десятичный разделитель запятой.

Чтобы исправить эти проблемы, мы можем взять реализацию по умолчанию из файла jquery.validate.js для функций range () и number (). Затем мы создаем другой файл .js (скажем, jQueryFixes.js), в котором мы заменяем эти функции по умолчанию теми, которые содержат поддержку запятой в качестве десятичного разделителя. Содержимое файла должно быть примерно таким:

$.validator.methods.range = function (value, element, param) {
    var globalizedValue = value.replace(",", ".");
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}

$.validator.methods.number = function (value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
}
person Nathan Taylor    schedule 12.11.2011
comment
Есть какой-нибудь правильный способ сделать это? - person Christoph Brückmann; 01.11.2016
comment
Я имею в виду, как насчет обработки разных десятичных значений в разных культурах? Конечно, я просто хочу сохранить значения в одной культуре, но я хочу дать посетителю веб-страницы возможность вводить и проверять десятичные значения в своей культуре. - person Christoph Brückmann; 01.11.2016
comment
@Christoph Brückmann, я немного опоздал на вечеринку, но это решение работает. На французском он принимает 140,44 доллара, а на английском - 140,44 доллара. - person Alexandre; 23.04.2019