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

用javascript从.NET/Razor解析本地化数字的最佳方法是什么?,javascript,.net,localization,numbers,Javascript,.net,Localization,Numbers,我有一个.NET应用程序,允许用户选择自己的语言和文化(日期/数字格式)。它们的区域性设置存储在Thread.CurrentThread.CurrentCulture(也是Thread.CurrentThread.CurrentUICulture,但这是一个单独的问题) 当我通过Razor打印var时,它以本地化格式显示: <span>@bignum</span> (renders as "123.456" or "123,456") 问题在于,本例中的Javascri

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

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

<span>@bignum</span> (renders as "123.456" or "123,456")
问题在于,本例中的Javascript不理解这些数字的本地化版本,因此由于上述语句变为:

var js_bignum = 123,456;
这可能是因为用户浏览器的区域性设置与用户webapp的区域性设置不同。无论如何,这是一种我们需要处理的情况

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

var js_bignum = @price.ToUnlocalizedFormat();  (Is there something like this?)
我只是想找出这种情况下的最佳实践


谢谢

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

编辑

我不同意乔的回答,会认为这是个坏主意。™. 我不建议重新发明轮子。如果您更喜欢更全面的方法,那么我会选择包括一个专用的C#JSON编码库(我建议)

最简单的方法是,我会做一个HtmlHelper扩展。比如:

public static class JsonExtensions {
     public static string ToJson(this HtmlHelper html) {
         return new JsonWriter().Write(t);
     }
}
然后在具有以下内容的视图中使用它:

@Html.ToJson(price)
这应该处理基本类型和复杂类型

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


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

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

如果我是你,我会将格式化逻辑包装在一个helper类中,类似于以下内容,并在需要时调用helper方法:

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)

中使用它时,它更易于维护,并且可以清楚地表达您的意图。您能从Razor表达式调用方法吗?因为这就是
number.ToString(CultureInfo.InvariantCulture)
应该做的事情(用于导入正确名称空间的modulo Razor语法等)。谢谢!“CultureInfo.InvariantCulture”是我所缺少的。这正是我想要的——一个文化无关的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";
    }
}