Почему я должен дважды щелкнуть по языку из поля asp: listitem, чтобы изменить культуру? - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть выпадающий список asp: listitem, который выглядит мне совершенно чистым.Он работает так же, как когда в первый раз вы меняете язык на этой странице (скажем, с английского на шведский), меняет текст на этот язык.

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

Я пытался удалить строки из кода, по одному, но ничего не изменилось.Если можно сказать, в чем может быть причина, любая помощь будет искренне признательна!

Моя страница .aspx выглядит так:

  <asp:DropDownList ID="ddlCulture" DataTextField="DisplayName"
  DataValueField="Name" runat="server" BackColor="#DDE4EC" ForeColor="#465C71"
  Width="130px"  AutoPostBack="True">
  <asp:ListItem Selected="True" meta:resourcekey="MenuItemResourcelangen9">Select
  Language</asp:ListItem>
  <asp:ListItem Value="en" meta:resourcekey="MenuItemResourcelangen1"></asp:ListItem>
  <asp:ListItem Value="es-MX" meta:resourcekey="MenuItemResourcelangen2">
  </asp:ListItem>
  <asp:ListItem Value="fr" meta:resourcekey="MenuItemResourcelangen3"></asp:ListItem>
  <asp:ListItem Value="de" meta:resourcekey="MenuItemResourcelangen4"></asp:ListItem>
  <asp:ListItem Value="sv" meta:resourcekey="MenuItemResourcelangen5"></asp:ListItem>
  <asp:ListItem Value="ja" meta:resourcekey="MenuItemResourcelangen6"></asp:ListItem>
  <asp:ListItem Value="nl" meta:resourcekey="MenuItemResourcelangen7"></asp:ListItem>
  <asp:ListItem Value="ru" meta:resourcekey="MenuItemResourcelangen8"></asp:ListItem>
  </asp:DropDownList>

Мой код такой:

Partial Public Class Site
Inherits System.Web.UI.MasterPage

Private Property UICulture As String

Protected Sub InitializeCulture()
    If Session("culture") IsNot Nothing Then
        UICulture = Session("culture").ToString()
    End If
End Sub

Protected Sub ddlCulture_SelectedIndexChanged(sender As Object, e As System.EventArgs)
Handles ddlCulture.SelectedIndexChanged
    Session("uiculture") = ddlCulture.SelectedValue
    Session("culture") = ddlCulture.SelectedValue
    Server.Transfer(Request.Path)
End Sub
End Class

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

InitializeCulture вызывается до события элемента управления (SelectedIndexChanged).

Если вы используете Response.Redirect (Request.RawUrl), измененные параметры сеанса применяются в InitializeCulture, и страница может быть обновлена ​​(F5)без "пост снова?"сообщение в браузере.

1 голос
/ 06 февраля 2012

Вместо обработки выбранного события изменения индекса, я предлагаю вам использовать объект Request, чтобы получить выбранную культуру с перегрузкой InitializeCulture.Например,

Protected Sub InitializeCulture()
   Dim selectedLanguage As String = Request.Form(ddlCulture.UniqueID)
   IF selectedLanguage IsNot Nothing Then
      Me.Culture = Me.UICulture = selectedLanguage
      Thread.CurrentThread.CurrentCulture = _
          CultureInfo.CreateSpecificCulture(selectedLanguage)
      Thread.CurrentThread.CurrentUICulture = New _
         CultureInfo(selectedLanguage)
   End If
   MyBase.InitializeCulture()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...