initializeCulture von Seiten feuert, bevor der selectedIndexChange der dropdownlist in masterPage
Ich habe eine masterpage mit einem language-selector-Steuerelement dropdownlist
es hat mehrere Unterseiten, die über die masterpage aber in den Unterseiten (ich erstellte eine basePage-Klasse, die ich dann lassen Sie die Seiten Erben von) ich überschreiben Sie die initializeCulture.
wie diese:
protected override void InitializeCulture()
{
String selectedLanguage = Common.SessionManager.Language;
if (selectedLanguage == "")
{
selectedLanguage = ConfigurationManager.AppSettings.Get("defaultLanguage");
}
if (selectedLanguage == "")
{
selectedLanguage = "nl-BE";
}
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
base.InitializeCulture();
}
auf das SelectedIndexChanged-Ereignis des dropdownlist, habe ich die neue Sprache in der session
wie diese:
protected void LanguageSelectorSelectedIndexChanged(object sender, EventArgs e)
{
string sCulture = LanguageSelector.SelectedValue;
Common.SessionManager.Language = sCulture;
}
aber die initializeCulture hat dann schon gefeuert worden.
so habe ich eine Art delay-Effekt laden der Seite werden mit der vorherigen Sprache und auf das nächste postback seine korrekt übersetzt.
ich kann nicht rufen Sie die initializeCulture wieder, weil ich bin auf einer masterpage, und ich habe keinen Zugriff auf die Unterseite der basePage-Klasse.
hat jemand eine Idee, wie man gegen dieses Problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Lösung in diesem Fall ist die Umleitung Seite, um sich nach dem ändern der Sprache.
Könnten Sie versuchen, um die gewählte Sprache, durch die form gebuchte Werte:
Können Sie nicht verwenden, den event-handler für das dropdownlist-denn genau das geschieht nach
InitializeCulture()
.InitializeCulture()
geschieht, bevor der Anfrage-Werte geladen sind, in die Formular-Steuerelemente.Also der richtige Weg, um den Wert aus der dropdownlist ist NICHT zu verwenden, den event-handler und verwenden
Request.Form["yourddlid"]
innenInitializeCulture()
Sie den ausgewählten Wert.In die gleiche Richtung von der "Redirect auf sich selbst" zu beantworten, die Sie nutzen könnten-Server.Transfer() statt der Umleitung zu vermeiden, die einen round-trip an den client. So etwas wie dieses (bedenkt, es ist in der Standard.aspx-Seite):
Habe ich gespeichert, die LCID der Kultur in der combo-box-Werte, aber das ist nicht wichtig. Das Herz der Technik ist es, Benutzer-Server.Transer(pagename), so dass die Seite workflow ist reinitiated und die Seite.InitializeCulture hat eine chance auf die "aktuellen" Werte aus der Session.