DropDownList переключается с испанского на английский? - PullRequest
1 голос
/ 13 июля 2010

Зачем DropDownList переключаться с испанского на английский, когда кто-то выбирает новый элемент в нем?И как можно предотвратить это?

   <asp:DropDownList ID="ddl_r1pc" runat="server" AutoPostBack="True"
       OnSelectedIndexChanged="ddlRelationship_SelectedIndexChanged">
       <asp:ListItem></asp:ListItem>
       <asp:ListItem Value="Spouse" Text="<%$Resources:messages, RelSpouse %>"></asp:ListItem>
       <asp:ListItem Value="Parent(s)" Text="<%$Resources:messages, RelParents %>"></asp:ListItem>
       <asp:ListItem Value="Other" Text="<%$Resources:messages, Other %>"></asp:ListItem>
   </asp:DropDownList>

Тогда в Page_Load() это всегда выполняется (т. Е. Как IsPostBack и !IsPostBack):

   try {
       culture = (string) Session["culture"];
       Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
   }
   catch {
       Server.Transfer("~/sessiontimeout.aspx");
   }

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

Когда вы просматриваете раскрывающийся список перед AutoPostBack (как на стороне сервера, так и в FireBug), каждый ListItem устанавливается правильно,как в

  Value="Some English" Text="Some Español"

, тогда как после PostBack выглядит так:

  Value="Some English" Text="The same English"

Почему это происходит, и что я могу сделать, чтобы сохранитьПо-испански кто-нибудь видит перед любыми PostBacks?

Примечания :

  1. Подпрограмма, указанная в OnSelectedIndexChanged, в настоящее время закомментирована, поэтому проблема не в этом.
  2. Я добавил EnableViewState="true" в DropDownList, но это не имело никакого значения, поэтому я удалил его.
  3. Как предложил Ichiban ниже, я перенес установку Thread.CurrentThread.CurrentUICulture из *От 1034 * до Page_Init(), но это тоже не имело никакого значения.

Ответы [ 2 ]

0 голосов
/ 15 июля 2010

Оказывается, вам нужно установить CurrentUICulture в переопределенном InitializeCuture():

protected override void InitializeCulture() {
    try {
        culture = (string) Session["culture"];
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
    }
    catch {
        Server.Transfer("~/sessiontimeout.aspx");
    }

    base.InitializeCulture();
}

Как только я вставлю это, выпадающий список останется на выбранном языке после AutoPostBacks!

0 голосов
/ 13 июля 2010

Попробуйте добавить код, который устанавливает CultureInfo для события Page_Init вместо Page_Load

protected override void OnInit(object source, EventArgs e) {
   try {
       culture = (string) Session["culture"];
       Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
   }
   catch {
       Server.Transfer("~/sessiontimeout.aspx");
   }
}
...