购物车上使用的 ASP.NET 的文化问题

Posted

技术标签:

【中文标题】购物车上使用的 ASP.NET 的文化问题【英文标题】:Culture Issue with ASP.NET used on Shopping Cart 【发布时间】:2010-02-04 12:01:15 【问题描述】:

我正在开发一个购物车,部分功能是选择您的货币。

我有一个下拉列表,当所选索引更改时,我编写了一些代码来查找文化代码(例如 en-GB 或 en-US),然后更改当前会话的文化。此外,使用给定的汇率会改变价格...

我目前将 en-GB 作为默认文化。当有人从下拉列表中选择 en-US 文化时,一切正常。货币变化(所有货币标签都用 ToString("C") 设置)和汇率变化。

当我再次使用下拉列表选择 en-GB 时,汇率发生了变化(所以我知道代码正在工作),调试后我可以看到文化会话已从 en-US 更改为 en- GB,但货币仍显示为 $ 而不是 £。

我真的不明白为什么会这样。代码很简单,我为每个页面重写了 page_Load 事件,以根据文化显示正确的货币:

protected override void OnLoad(EventArgs e)


    if (Session["Culture"] != null)
    
        string culture = Session["Culture"].ToString();
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["Culture"].ToString());
    

    base.OnLoad(e);

当我将会话文化从 en-US 更改为 en-GB 时,为什么它没有将货币改回 £?

【问题讨论】:

观看区域性字符串时,它会显示 en-GB,所以我认为使用 ToString("C") 时货币应该会改变。当我将 en-GB 更改为 en-US 时它工作正常,它显示 $ 符号。 【参考方案1】:

因为您正在检查 if (Session["Culture"] != null),这会限制您第二次设置文化,因为 Session["Culture"] 不会为空。

【讨论】:

如果我创建另一种文化,例如瑞士法郎的 fr-CH,我可以在美元和瑞士法郎之间转换没有问题。它会更新货币符号,仅在出于某种原因更改回 en-GB 时。它显示 $ 而不是 £。【参考方案2】:

我明白了,因为它来自一个数据库条目,由于某种原因它是一个 char(10) 数据类型,我忘了修剪文本。这导致框架找不到文化并默认返回 en-US,因为它找不到“en-GB”。

【讨论】:

以上是关于购物车上使用的 ASP.NET 的文化问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.Net 中的 SOAP API 将购物车项目发送到 Paypal

尝试用 Woocommerce 购物车上的删除文本替换“x”

如何在 asp.net webform 中使用我自己的购物车实现 Paypal

寻找兼容 PayPal 的轻量级 ASP.net 购物车 [关闭]

仍然可以在 ASP.NET mvc 中使用 Session 变量,或者对于某些事情(比如购物车)有更好的选择

Magento:移动购物车上的 Paypal Express 按钮