首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中解析.NET/Razor中的本地化数字的最佳方法是什么?

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

Stack Overflow用户
提问于 2011-11-23 00:04:42
回答 2查看 660关注 0票数 5

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

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

代码语言:javascript
复制
<span>@bignum</span> (renders as "123.456" or "123,456")

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

代码语言:javascript
复制
var js_bignum = @bignum;

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

代码语言:javascript
复制
var js_bignum = 123,456;

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

那么处理这个问题最简单的方法是什么呢?我可以创建自己的Javascript ConvertToStandardNumberFormat(),它从.NET中获取一个字符串值并返回一个“标准”数字格式,但这看起来有点花哨。有没有办法强制.NET/razor呈现一个非本地化格式的数字?

代码语言:javascript
复制
var js_bignum = @price.ToUnlocalizedFormat();  (Is there something like this?)

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

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-23 00:16:42

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

编辑

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

最简单的方法是,我会做一个HtmlHelper扩展。类似于:

代码语言:javascript
复制
public static class JsonExtensions {
     public static string ToJson(this HtmlHelper html) {
         return new JsonWriter().Write(t);
     }
}

然后在视图中使用它:

代码语言:javascript
复制
@Html.ToJson(price)

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

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

但这将比以静态助手类的形式滚动自己的序列化程序要灵活得多(也经过测试)……

票数 4
EN

Stack Overflow用户

发布于 2011-11-23 00:26:51

正如在另一个答案中已经指出的,一个简单的解决方案是使用InvariantCulture调用ToString,但是这并不能清楚地传达您的意图,并且可能会导致人们认为InvariantCulture适用于其他数据类型。

如果我是你,我会将格式化逻辑封装在一个helper类中,如下所示,并在需要的地方调用helper方法:

代码语言:javascript
复制
public static class JsLiteral
{
    public static string From(float number)
    {
        return From((double)number);
    }

    public static string From(double number)
    {
        return number.ToString(CultureInfo.InvariantCulture);
    }

    public static string From(bool flag)
    {
        return flag ? "true" : "false";
    }
}

当您在视图@JsLiteral.From(bignum)中使用它时,这更容易维护,而且也清楚地表达了您的意图。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8229848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档