Ползунок пользовательского интерфейса jQuery и глобализация jQuery со значением, разделенным запятой [, ]
Я занимаюсь разработкой приложения ASP.NET MVC 3, которое использует как глобализацию jQuery, так и слайдер пользовательского интерфейса jQuery.
Я локализую это приложение на португальский из Бразилии (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 ответ
Ваш ползунок принимает значения InvariantCulture, поэтому вам нужно предоставить такие. Просто измените свой метод:
public static string ParseValue(this float value)
{
return value.Value.ToString(CultureInfo.InvariantCulture);
}
КСТАТИ. ParseValue - не лучшее имя здесь, так как никакого анализа не происходит. FormatValue будет звучать лучше.
КСТАТИ. Ваш оригинальный метод не будет работать правильно для некоторых культур (может быть невидимым для небольших значений, но для более чем 100 может случиться что-то плохое). Если вам нужна точка в качестве плавающей точки, всегда используйте InvariantCulture.