initializeCulture страниц запускается перед selectedIndexChange выпадающего списка в masterPage - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть главная страница с выпадающим списком выбора языка

она имеет несколько подстраниц, использующих главную страницу, но на подстраницах (я создал класс basePage, от которого затем разрешают страницы наследоваться) я переопределяю initializeCulture.например:

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();
        }

для события SelectedIndexChanged раскрывающегося списка, я установил новый язык в сеансе следующим образом:

    protected void LanguageSelectorSelectedIndexChanged(object sender, EventArgs e)
    {
        string sCulture = LanguageSelector.SelectedValue;
        Common.SessionManager.Language = sCulture;
    }

, но initializeCulture уже был запущен.

поэтому у меня есть своего рода эффект задержки, страница загружается с предыдущим языком, и при следующем постбэке она переведена правильно.

я не могу снова вызвать initializeCulture, потому что я на главной странице иу меня нет доступа к классу basePage подстраницы.

у кого-нибудь есть идеи, как с этим справиться?

Ответы [ 5 ]

1 голос
/ 20 июля 2011

Вы не можете использовать обработчик событий для выпадающего списка, потому что это происходит после InitializeCulture(). InitializeCulture() происходит до загрузки значений запроса в элементы управления формы.

Таким образом, правильный способ получить значение из выпадающего списка - НЕ использовать обработчик событий и использовать Request.Form["yourddlid"] внутри InitializeCulture(), чтобы получить выбранное значение.

1 голос
/ 17 февраля 2011

Вы можете попытаться получить выбранный язык, указав значения формы:

    protected override void InitializeCulture()
    {
        String selectedLanguage = Common.SessionManager.Language;

        if (Request.Form.ContainsKey(myLanguageDropDown.ClientID)
            selectedLanguage = Request.Form[myLanguageDropDown.ClientID];

        if (selectedLanguage == "")
        {
        ...
0 голосов
/ 09 мая 2016
protected override void InitializeCulture(){
   Page.UICulture = Request.Form["ddlLanguage"];
} 
0 голосов
/ 28 марта 2012

В том же духе ответа «Перенаправить к себе» вы можете использовать Server.Transfer () вместо перенаправления, избегая обратного пути к клиенту.Примерно так (учтите, что это на странице Default.aspx):

    protected override void InitializeCulture()
    {
        if (Session["LCID"] != null)
        {
            int lcid = (int)Session["LCID"];
            CultureInfo c = new CultureInfo(lcid);
            Thread.CurrentThread.CurrentCulture = c;
        }
        base.InitializeCulture();
    }

    protected void comboCultures_SelectedIndexChanged(object sender, EventArgs e)
    {
        CultureInfo c = new CultureInfo(Thread.CurrentThread.CurrentCulture.LCID);
        if (comboCultures.SelectedItem != null)
            c = CultureInfo.GetCultureInfo(Convert.ToInt32(comboCultures.SelectedItem.Value));
        Session["LCID"] = c.LCID;
        Server.Transfer("Default.aspx");
    }

Я сохранил LCID культуры в значениях поля со списком, но это не важно.Суть этого метода заключается в том, что пользователь Server.Transer (pagename) перезапускает рабочий процесс страницы, и Page.InitializeCulture имеет шанс получить «текущие» значения из сеанса.

0 голосов
/ 21 февраля 2011

Мое решение в этом случае - перенаправить страницу на себя после смены языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...