изменение языка по второму клику - PullRequest
1 голос
/ 16 мая 2011

Чтобы изменить язык, я нажимаю на кнопку 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();

}

Теперь проблема в том, что мне нужно дважды щелкнуть по кнопке image, чтобы изменить язык. Что я могу сделать, чтобы изменить язык с первого клика?

Обратите внимание, что я довольно плохо знаком с ASP.NET, поэтому это может быть простое решение

Ответы [ 6 ]

1 голос
/ 16 мая 2011

InitializeCulture() - это одна из первых вещей , которая происходит при загрузке страницы:

Метод InitializeCulture называется очень рано в жизненном цикле страницы, до создания элементов управления или свойства установлены для страницы. Поэтому читать значения, которые перейдя на страницу из элементов управления, вы должны получить их прямо из запрос с использованием формы коллекции.

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

Самый простой способ изменить культуру одним щелчком мыши - перезагрузить страницу после SetCulture() через перенаправление на себя:

Response.Redirect(Request.RawUrl);
1 голос
/ 16 мая 2011

У меня была эта проблема раньше. Вероятно, вы используете главную страницу, и некоторые методы выполняются на главной странице, другие на внутренней странице.

Проблема заключается в том, что вещи загружаются. Это означает: некоторый код выполняется до вашего SetCulture(Session, "en-GB");.

В этом случае попробуйте выполнить отладку, чтобы сначала выяснить, что работает, а затем исправить.

0 голосов
/ 16 мая 2011

Самое простое решение - это Response.Redirect(Request.RawUrl); в обработчике кликов после установки культуры.

0 голосов
/ 16 мая 2011

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

Responce.Redirect(Request.UrlReferrer.AbsolutePath);  
0 голосов
/ 16 мая 2011

Обработчик события для вашего нажатия кнопки, вероятно, сработает после инициализации страницы, поэтому самый простой способ решить эту проблему (не обязательно самый элегантный) - это изменить культуру в состоянии сеанса, а затем сразу же запустить перенаправить на ту же страницу. * 1001 Т.е. *

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

Это должно заставить браузер снова запрашивать страницу.

0 голосов
/ 16 мая 2011

Вы пытались звонить InitializeCulture() изнутри SetCulture()?

...