Слайдер jQuery UI и глобализация jQuery со значением, разделенным запятой - PullRequest
0 голосов
/ 02 мая 2011

Я занимаюсь разработкой приложения ASP.NET MVC 3, в котором используются jQuery Globalization и jQuery UI Slider .

Я локализую это приложение на португальский из Бразилии (pt-BR), и оно также поддерживает английский язык.

Проблема в том, что когда я меняю язык на португальский, все значения модели float разделяются запятой (,), например, 7,7. Затем я пытаюсь установить начальное значение ползунка, но он принимает значение только с точкой (.), Как 7.7.

Чтобы преодолеть такую ​​ситуацию, я делаю это:

$.CreateSlider("#sliderHeight", "#Height", @Model.Height.FormatValue(), 0, 2.5, 0.01);

FormatValue - это метод расширения:

public static string FormatValue(this float value)
{
    return value.Value.ToString().Replace(",", ".");
}

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

Затем я должен использовать jQuery Globalization, чтобы отобразить правильное значение в пользовательском интерфейсе следующим образом:

$(textBox).val($.global.format(ui.value, 'n2'));

Это работает как минимум ...

Мой вопрос:

Есть ли лучший или стандартный способ сделать это?

Дело в том, что значения модели приходят так, как они должны, то есть, когда я переключил культуру на pt-BR, числа приходят (,) с разделителями. Это правильно с моей точки зрения. Ограничение заключается в том, как jQuery Slider получает значение.

Просто для дополнения: если бы я попытался передать значения так, как они поступают из @Model, у меня было бы что-то вроде этого, которое, очевидно, сломалось бы (поскольку значения параметров сами разделены запятыми):

$.CreateSlider("#sliderHeight", "#Height", 7,7 , 0, 2.5, 0.01);

1 Ответ

1 голос
/ 02 мая 2011

Ваш ползунок принимает значения InvariantCulture, поэтому вам необходимо предоставить такие. Просто измените свой метод:

public static string ParseValue(this float value)
{
    return value.Value.ToString(CultureInfo.InvariantCulture);
}

КСТАТИ. ParseValue - не лучшее имя, так как никакого анализа не происходит. FormatValue будет звучать лучше.
КСТАТИ. Ваш оригинальный метод не будет работать правильно для некоторых культур (может быть невидимым для небольших значений, но для более чем 100, то есть может произойти 100 плохих вещей). Если вам нужна точка с плавающей точкой, всегда используйте InvariantCulture.

...