在javascript中从.NET/Razor解析本地化数字的最佳方法是什么?

roc*_*eys 5 .net javascript localization numbers

我有一个.NET应用程序,允许用户选择自己的语言和文化(日期/数字格式).他们的文化背景存储在Thread.CurrentThread.CurrentCulture(也是 Thread.CurrentThread.CurrentUICulture,但这是一个单独的问题).

当我通过Razor打印var时,它以本地化格式显示:

<span>@bignum</span> (renders as "123.456" or "123,456")
Run Code Online (Sandbox Code Playgroud)

但是,我还需要将一些.NET变量传递给Javascript:

var js_bignum = @bignum;
Run Code Online (Sandbox Code Playgroud)

问题是在这种情况下Javascript不理解这些数字的本地化版本,因此它失败,因为上面的语句变为:

var js_bignum = 123,456;
Run Code Online (Sandbox Code Playgroud)

这可能是因为用户的浏览器文化设置与用户的webapp文化设置不同.无论如何,这是我们需要能够处理的情况.

那么最简单的处理方法是什么?我可以创建自己的Javascript ConvertToStandardNumberFormat(),从.NET获取字符串值并返回"标准"数字格式,但这似乎有点像黑客.有没有办法强制.NET/razor呈现非本地化的格式编号?

var js_bignum = @price.ToUnlocalizedFormat();  (Is there something like this?)
Run Code Online (Sandbox Code Playgroud)

我只是想弄清楚这种情况的最佳实践是什么.

谢谢!

J. *_*mes 4

我会用@price.ToString(CultureInfo.InvariantCulture)

\n\n

编辑

\n\n

我不同意 Jo\xc3\xa3o 的答案,并认为这是一个坏主意™。我不建议重新发明轮子。如果您更喜欢更全面的方法,那么我会选择包含专用的 C# JSON 编码库(我会推荐JsonFx.NET)。

\n\n

最简单的方法是,我会制作一个 HtmlHelper 扩展。就像是:

\n\n
public static class JsonExtensions {\n     public static string ToJson(this HtmlHelper html) {\n         return new JsonWriter().Write(t);\n     }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在视图中使用它:

\n\n
@Html.ToJson(price)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该处理原始类型和复杂类型。

\n\n

之后,我可能会重构一些东西并尝试提出更好的注入模式,这样我就不会在JsonWriter每次调用助手时都创建一个新的注入模式。

\n\n

但这比以静态帮助器类的形式滚动您自己的序列化器更加灵活(并且经过测试)......

\n