要更改语言,我单击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的新手,所以它可能是一个简单的解决方案
答案 0 :(得分:1)
我以前遇到过这个问题。您可能正在使用母版页,某些方法在母版页中执行,其他方法在内页中执行。
问题在于加载东西的顺序。这意味着:某些代码在SetCulture(Session, "en-GB");
之前运行。
在这种情况下,请尝试调试以找出先运行的内容然后再修复它。
答案 1 :(得分:1)
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);
。