第二次点击时语言改变

时间:2011-05-16 13:55:23

标签: c# asp.net localization globalization

要更改语言,我单击imageButton,执行类似:

的操作
SetCulture(Session, "en-GB");

此功能实现如下:

public static void SetCulture(HttpSessionState session, string locale)
{
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale);
      Thread.CurrentThread.CurrentCulture = new CultureInfo(locale);

      session["currentLocale"] = locale;
}

另外,我的.aspx页面是LocalizedPage类型,它覆盖了InitializeCulture:

protected override void InitializeCulture()
{            
    if (Session["currentLocale"] != null)
    {
         //changes the cultures of the current Thread
         CurrentUICulture = new CultureInfo((string)Session["currentLocale"]);
         CurrentCulture = new CultureInfo((string)Session["currentLocale"]);                
    }
    base.InitializeCulture();

}

现在,问题是我必须在imageButton上单击两次才能更改语言。如何在第一次点击时更改语言?

请注意,我是ASP.NET的新手,所以它可能是一个简单的解决方案

6 个答案:

答案 0 :(得分:1)

我以前遇到过这个问题。您可能正在使用母版页,某些方法在母版页中执行,其他方法在内页中执行。

问题在于加载东西的顺序。这意味着:某些代码在SetCulture(Session, "en-GB");之前运行。

在这种情况下,请尝试调试以找出先运行的内容然后再修复它。

答案 1 :(得分:1)

加载页面时发生的{p> InitializeCulture()one of the first things

  

调用InitializeCulture方法   在页面生命周期的早期,   在创建控件之前或   为页面设置属性。   因此,要读取值   从控件传递到页面,你   必须直接从他们那里得到他们   请求使用表单集合。

当您尝试使用Button更改文化时,在初始化文化后,该位代码可以很好地运行到页面生命周期中。

让文化更改的最简单方法,只需点击一下即可在SetCulture()之后通过重定向重新加载页面:

Response.Redirect(Request.RawUrl);

答案 2 :(得分:0)

您是否尝试过调用InitializeCulture()内的SetCulture()

答案 3 :(得分:0)

按钮点击的事件处理程序很可能在页面初始化后触发,因此解决此问题的最简单方法(不一定是最优雅的)是在Session状态下更改文化,然后立即发出重定向到同一页面。即。

SetCulture(Session, "en-GB");
Response.Redirect(Request.RawUrl);

这会导致浏览器再次请求该页面。

答案 4 :(得分:0)

在按钮点击事件中更改文化后,使用下面的代码行将用户重定向到同一页面。

Responce.Redirect(Request.UrlReferrer.AbsolutePath);  

答案 5 :(得分:0)

在设置文化后,最简单的解决方案是点击处理程序中的Response.Redirect(Request.RawUrl);