MVC3 редактировать для десятичных полей и локализации - PullRequest
10 голосов
/ 12 ноября 2011

Моя локаль использует запятую ,, а не точку . для десятичного разделителя.

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

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

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

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

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

Ответы [ 2 ]

18 голосов
/ 12 ноября 2011

В этом сообщении блога рекомендуется переопределить правила числа и диапазона проверки 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);
}
6 голосов
/ 12 ноября 2011

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

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

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

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

...