2016-08-05 6 views
0

tatsächlich bin ich noch neu in ASP.NET und habe versucht, eine einfache Webanwendung mit Gridview zu erstellen, um Daten aus der Datenbank abzurufen und es dem Benutzer und dem zu zeigen Der Benutzer kann die Sprache ändern, indem er auf einen Radioknopf drückt, um von Englisch zu Arabisch zu wechseln und umgekehrt, aber unglücklicherweise, wenn ich arabisch wähle, wenn die Seite zum ersten Mal nichts passiert und es die Seite auf Englisch behält, bis ich auf Englisch drücke Radio knopf.Kann Sprache nicht mit Sitzung zur Laufzeit ändern ASP.NET

P.S. Bitte überprüfen Sie die angehängte Datei, um mein Problem vollständig zu verstehen.

hier ist mein HTML-Code

<div> 
    &nbsp;<asp:RadioButtonList ID="LangRadioButton" AutoPostBack="true" runat="server" RepeatColumns="2" meta:resourcekey="LangRadioButtonResource1" 
     OnSelectedIndexChanged="LangRadioButton_SelectedIndexChanged"> 
     <asp:ListItem Text="English" Value="en-US" Selected="True"></asp:ListItem> 
     <asp:ListItem Text="Arabic" Value="ar-YE"></asp:ListItem> 
    </asp:RadioButtonList> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" 
     BorderWidth="1px" CellPadding="3" CellSpacing="2" 
     DataSourceID="ObjectDataSource1" DataKeyNames="Id" meta:resourcekey="GridView1Resource1"> 
     <Columns> 
      <asp:CommandField ShowSelectButton="True" meta:resourcekey="CommandFieldResource1" /> 
      <asp:BoundField DataField="Id" HeaderText="Id" SortExpression="Id" meta:resourcekey="BoundFieldResource1" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" meta:resourcekey="BoundFieldResource2" /> 
      <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" meta:resourcekey="BoundFieldResource3" /> 
     </Columns> 
     <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> 
     <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> 
     <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" /> 
     <SortedAscendingCellStyle BackColor="#FFF1D4" /> 
     <SortedAscendingHeaderStyle BackColor="#B95C30" /> 
     <SortedDescendingCellStyle BackColor="#F1E5CE" /> 
     <SortedDescendingHeaderStyle BackColor="#93451F" /> 
    </asp:GridView> 
    <br /> 
    <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
     BackColor="#DEBA84" BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
     CellSpacing="2" DataSourceID="ObjectDataSource2" Height="50px" Width="125px" DataKeyNames="Id" 
     OnItemDeleted="DetailsView1_ItemDeleted" OnItemInserted="DetailsView1_ItemInserted" 
     OnItemUpdated="DetailsView1_ItemUpdated" meta:resourcekey="DetailsView1Resource1"> 
     <EditRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White"/> 
     <Fields> 
      <asp:BoundField DataField="Id" InsertVisible="false" ReadOnly="true" HeaderText="Id" SortExpression="Id" meta:resourcekey="BoundFieldResource4" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" meta:resourcekey="BoundFieldResource5" /> 
      <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" meta:resourcekey="BoundFieldResource6" /> 
      <asp:BoundField DataField="PhoneNo" HeaderText="PhoneNo" SortExpression="PhoneNo" meta:resourcekey="BoundFieldResource7" /> 
      <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" meta:resourcekey="CommandFieldResource2" /> 
     </Fields> 
     <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" /> 
     <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" /> 
     <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" /> 
    </asp:DetailsView> 
    <br /> 
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllEmployeesBasicDetails" TypeName="CascadingDDL.EmployeeDataAccessLayer"></asp:ObjectDataSource> 
    <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="GetAllEmployeesFullDetailsByUd" 
     TypeName="CascadingDDL.EmployeeDataAccessLayer" DeleteMethod="DeleteEmployee" InsertMethod="InsertEmployee" 
     UpdateMethod="UpdateEmployee"> 
     <DeleteParameters> 
      <asp:Parameter Name="Id" Type="Int32" /> 
     </DeleteParameters> 
     <InsertParameters> 
      <asp:Parameter Name="Name" Type="String" /> 
      <asp:Parameter Name="City" Type="String" /> 
      <asp:Parameter Name="PhoneNo" Type="Int32" /> 
     </InsertParameters> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="GridView1" Name="Id" PropertyName="SelectedValue" Type="Int32" /> 
     </SelectParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="Id" Type="Int32" /> 
      <asp:Parameter Name="Name" Type="String" /> 
      <asp:Parameter Name="City" Type="String" /> 
      <asp:Parameter Name="PhoneNo" Type="Int32" /> 
     </UpdateParameters> 
    </asp:ObjectDataSource> 

</div> 

und hier ist mein Code-hinter

public partial class DetailsviewInUpDe : System.Web.UI.Page 
{ 
    protected override void InitializeCulture() 
    { 
     if (Session["Lang"] != null) 
     { 
      string cultureName = Session["Lang"].ToString(); 
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName); 
     } 

     base.InitializeCulture(); 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      if (Session["Lang"] == null) 
      { 
       Session["Lang"] = "en-US"; 
      } 
     } 

    } 
    protected void LangRadioButton_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Session["Lang"] = LangRadioButton.SelectedValue.ToString(); 
    } 
    protected void Page_PreRender(object sender, EventArgs e) 
    { 

     if (CultureInfo.CurrentUICulture.Name == "ar-YE") 
     { 
      form1.Attributes["dir"] = ((string)GetLocalResourceObject("Dir")).ToString(); 
     } 
     else 
     { 
      form1.Attributes["dir"] = ((string)GetLocalResourceObject("Dir")).ToString(); 
     } 

     if (GridView1.SelectedRow == null) 
     { 
      DetailsView1.Visible = false; 
     } 
     else 
     { 
      DetailsView1.Visible = true; 
     } 
    } 

    protected void DetailsView1_ItemInserted(object sender, DetailsViewInsertedEventArgs e) 
    { 
     GridView1.DataBind(); 
     GridView1.SelectRow(-1); 
    } 

    protected void DetailsView1_ItemDeleted(object sender, DetailsViewDeletedEventArgs e) 
    { 
     GridView1.DataBind(); 
     GridView1.SelectRow(-1); 
    } 

    protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e) 
    { 
     GridView1.DataBind(); 
     GridView1.SelectRow(-1); 
    } 
} 

demo for the encountered problem

Antwort

0

This MSDN article beschreibt, wie programmatisch Seite der Kultur zu ändern. In der Tat wird die InitializeCulture Methode viel früher während der Seitenverarbeitung aufgerufen als dann LangRadioButton_SelectedIndexChanged Event-Handler. Verwenden Sie daher den Event-Handler nicht, um den ausgewählten Wert zu lesen.

lesen ausgewählter Wert direkt aus eingestellten Daten (Request.Form Name/Wert-Sammlung) in den InitializeCulture Verfahren auf diese Weise:

protected override void InitializeCulture() 
{ 
    //read posted value 
    if (!String.IsNullOrEmpty(Request.Form["LangRadioButton"])) { 
     Session["Lang"] = Request.Form["LangRadioButton"]; 
    } 

    //set default value if it's empty 
    if (String.IsNullOrEmpty(Session["Lang"])) 
    { 
     Session["Lang"] = "en-US"; 
    } 

    string cultureName = Session["Lang"].ToString(); 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName); 

    base.InitializeCulture(); 
} 

Dann löscht nutzlos Code von Methoden Page_Load und LangRadioButton_SelectedIndexChanged und das ist alles ;-)

+0

Plaz vielen Dank arbeitete sehr wie ein Charme Ich habe gerade diesen Teil gelöschtif (String.IsNullOrEmpty (Sitzung ["Lang"])) { Sitzung ["Lang"] = "en-US"; } –

Verwandte Themen