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

时间:2010-02-04 12:01:15

标签: asp.net culture

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

我有一个下拉列表,当所选索引发生变化时,我编写了一些代码来查找文化代码(例如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时,为什么不将货币更改回£?

2 个答案:

答案 0 :(得分:1)

因为你正在检查是否(Session [“Culture”]!= null),这限制了你第二次设置文化,因为Session [“Culture”]不会为null。

答案 1 :(得分:1)

我知道了,因为它来自数据库条目,由于某种原因是char(10)数据类型,我忘了修剪文本。这导致该框架找不到该文化,并且因为找不到'en-GB'而违反了en-US。