0

我正在开发一个同时使用jQuery GlobalizationjQuery UI Slider的 ASP.NET MVC 3 应用程序。

我正在将此应用程序本地化为来自巴西的葡萄牙语 (pt-BR),它还支持英语。

问题是,当我将语言更改为葡萄牙语时,所有模型float值都由逗号 (, ) 分隔,例如 7,7。然后我尝试设置 Slider 初始值,但它只接受带有点 (.) 的值,如 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 Slider 值。

然后我必须使用 jQuery Globalization 以这种方式在 UI 中显示正确的值:

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

它至少有效...

我的问题是:

有没有更好或标准的方法来做到这一点?

问题是模型值正在以它们应该的方式出现,也就是说,当我将文化切换到 pt-BR 时,数字以 ( , ) 分隔。这在我看来是正确的。限制在于 jQuery Slider 接收值的方式。

只是为了补充:如果我试图以它们来自的方式传递值@Model,我会有这样的东西,这显然会中断(因为参数值本身用逗号分隔):

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

1 回答 1

1

您的滑块接受 InvariantCulture 值,因此您需要提供此类值。只需修改您的方法:

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

顺便提一句。ParseValue 不是最好的名称,因为没有进行解析。FormatValue 听起来会更好。
顺便提一句。对于某些文化,您的原始方法将无法正常工作(对于较小的值可能不可见,但对于大于 100 的坏事可能会发生)。如果您需要一个点作为浮点数,请始终使用 InvariantCulture。

于 2011-05-02T19:14:44.217 回答