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

标签 javascript .net localization numbers

我有一个 .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/

相关文章:

javascript - Angular 输入类型日期时间本地验证

mysql - 如何从一个 DBCommand 对象执行两个单独的查询?

c# - 如何像在 Objective-C 2.0 中那样在 C# 中获取可选的接口(interface)方法实现?

.net - 获取本地化路径的函数?

c# - 是否有任何 T4 模板或自定义工具可以从 .resw 文件生成类?

c# - 在运行时更改资源的提取位置?

javascript - 无法将数据从 json 填充到 extjs 4 中的表单

javascript - 无法正确使用 Next.js 进行获取

.net - 更新组合框中显示的字段 DisplayMemberPath 未显示

javascript - JavaScript 文本区域处理中的复制剪切粘贴功能