Проблема с десятичными числами, запятыми и проверкой на стороне клиента

Я пытаюсь добиться проверки на стороне клиента дляnullable<decimal> чей десятичный разделитель может быть запятой (например, 123,45).

С моей точки зрения:

...

<div class="editor-label">
    @Html.LabelFor(model => model.Turnover)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Turnover)
    @Html.ValidationMessageFor(model => model.Turnover)
</div>

...

@section Scripts {

   @Styles.Render("~/Content/themes/base/css")
   @Scripts.Render("~/bundles/jquery")
   @Scripts.Render("~/bundles/jqueryui")
   @Scripts.Render("~/bundles/jqueryval")
   @Scripts.Render("~/bundles/jQueryFixes")
   ...scripts for this view...
}

Мои jQueryFixes переопределяютjquery.validate.js файл дляrange() а такжеnumber():

$.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);
}

... как предлагается во многих сообщениях / вопросах, касающихся этой проблемы (например:Вот или жеВот).

Достаточно странно:

Когда я пытаюсь передать значение, например 123,45, и хотя я отладил скрипт с помощью Firebug и увидел, что мои перегруженные функции вызываются и возвращают true, я не могу отправить форму. Вместо этого мой редактор для десятичного значения фокусируется по любой причине, и я не могу понять, почему.

(Я считаю, что моя проверка на стороне сервера - с использованием пользовательского связующего и т. Д. - работает нормально, и чтоэто не проблема здесьЯ хотел бы получить некоторую помощь о том, как получить форму для отправки или почему поле ввода становится сфокусированным, даже если оно выглядит правильным.)

РЕДАКТИРОВАТЬ 1:

Дополнительная информация. В моем BundlesConfig.cs:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));
...
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                    "~/Scripts/jquery-ui-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));
bundles.Add(new ScriptBundle("~/bundles/jQueryFixes").Include(
                    "~/Scripts/jQueryFixes.js")); 
...

РЕДАКТИРОВАТЬ 2:

После предложения @LeftyX я попытался использовать скрипт Globalize (после удаления моего jQueryFixes.js):

<script type="text/javascript">
    ...

    $( document ).ready(function() {
        Globalize.culture("en-US", "pt-PT");
    });

    $.validator.methods.number = function (value, element) {
        return this.optional(element) || jQuery.isNumeric(Globalize.parseFloat(value));
    }

    //Fix the range to use globalized methods
    jQuery.extend(jQuery.validator.methods, {
        range: function (value, element, param) {
            var val = Globalize.parseFloat(value);
            return this.optional(element) || (val >= param[0] && val <= param[1]);
        }
    });

   ...
</script>

... но я все еще сталкиваюсь с той же проблемой:validator.methods.number возвращает значение true, но форма не отправляется, и вместо этого поле ввода фокусируется.

Если я проверяю элемент ввода во время отправки, я вижу, что он быстроclass="valid" вclass='input-validation-error' а затем вернуться кvalid, Очень странно.

ЗАКЛЮЧЕНИЕ:

@LeftyX дал очень хорошее и полное решение для тех, кто находит те же проблемы.

У меня уже был пользовательский механизм связывания моделей для обнуляемых десятичных знаков, но скрипт глобализации и включение культуры в Model / ViewModel наверняка пригодятся.

Другой причиной моей проблемы может быть тот факт, что я (случайно) включил несколько сценариев дважды.

ОБНОВЛЕНИЕ (июль / 2015):

globalize.js сейчас немного по-другому. Ссылка вэтот ответ а такжедокументация для обновленных шагов.

Ответы на вопрос(2)

Ваш ответ на вопрос