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)
我只是想弄清楚这种情况的最佳实践是什么.
谢谢!
我会用@price.ToString(CultureInfo.InvariantCulture)
编辑
\n\n我不同意 Jo\xc3\xa3o 的答案,并认为这是一个坏主意™。我不建议重新发明轮子。如果您更喜欢更全面的方法,那么我会选择包含专用的 C# JSON 编码库(我会推荐JsonFx.NET)。
\n\n最简单的方法是,我会制作一个 HtmlHelper 扩展。就像是:
\n\npublic static class JsonExtensions {\n public static string ToJson(this HtmlHelper html) {\n return new JsonWriter().Write(t);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后在视图中使用它:
\n\n@Html.ToJson(price)\nRun Code Online (Sandbox Code Playgroud)\n\n这应该处理原始类型和复杂类型。
\n\n之后,我可能会重构一些东西并尝试提出更好的注入模式,这样我就不会在JsonWriter每次调用助手时都创建一个新的注入模式。
但这比以静态帮助器类的形式滚动您自己的序列化器更加灵活(并且经过测试)......
\n| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |