我有一个 .NET 应用程序,允许用户选择他们自己的语言和文化(日期/数字格式)。他们的区域性设置存储在 Thread.CurrentThread.CurrentCulture
(也称为 Thread.CurrentThread.CurrentUICulture
,但这是一个单独的问题)。
当我通过 Razor 打印出一个 var 时,它以本地化格式显示:
<span>@bignum</span> (renders as "123.456" or "123,456")
但是,我还需要将一些 .NET 变量传递给 Javascript:
var js_bignum = @bignum;
问题是在这种情况下 Javascript 不理解这些数字的本地化版本,所以它失败了,因为上面的语句变成了:
var js_bignum = 123,456;
可能是因为用户浏览器的文化设置与用户的webapp的文化设置不同。无论如何,这是我们需要能够处理的情况。
那么处理这个问题最简单的方法是什么?我可以创建自己的 Javascript ConvertToStandardNumberFormat()
,它从 .NET 中获取一个字符串值并返回一个“标准”数字格式,但这看起来有点像 hack。有没有办法强制 .NET/razor 呈现非本地化格式的数字?
var js_bignum = @price.ToUnlocalizedFormat(); (Is there something like this?)
我只是想找出针对这种情况的最佳实践。
谢谢!
最佳答案
我会使用 @price.ToString(CultureInfo.InvariantCulture)
编辑
我不同意 João 的回答,认为这是一个坏主意™。我不建议重新发明轮子。如果您更喜欢更全面的方法,那么我会选择包括一个专用的 C# JSON 编码库(我会推荐 JsonFx.NET )。
最简单的方法是制作一个 HtmlHelper 扩展。像这样的东西:
public static class JsonExtensions {
public static string ToJson(this HtmlHelper html) {
return new JsonWriter().Write(t);
}
}
然后在 View 中使用它:
@Html.ToJson(price)
这应该处理原始类型和复杂类型。
之后我可能会重构一些东西并尝试提出一个更好的注入(inject)模式,这样我就不会在每次调用助手时创建一个新的 JsonWriter
。
但这比以静态帮助类的形式滚动您自己的序列化程序要灵活得多(并且经过测试)...
关于javascript - 在 javascript 中从 .NET/Razor 解析本地化数字的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229848/