----------------旧代码-------------------------------- -------------- 我创建了一个用户控件,它是一个必须本地化的主菜单。所以我在 App_LocalResources 中创建了 3 个资源文件,并且我有一个下拉菜单来更改所选语言。
主菜单如下所示:-
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MainMenu.ascx.cs" Inherits="GGX4._2.MainMenu" %>
<div>
<asp:DropDownList ID="ddlLangs" runat="server"
onselectedindexchanged="ddlLangs_SelectedIndexChanged" AutoPostBack="True" meta:resourcekey="ddlLangsResource1">
<asp:ListItem Text="English" Value="en-US" meta:resourcekey="ListItemResource1"></asp:ListItem>
<asp:ListItem Text="German" Value="de-DE" meta:resourcekey="ListItemResource2"></asp:ListItem>
<asp:ListItem Text="Spanish" Value="es-ES" meta:resourcekey="ListItemResource3"></asp:ListItem>
</asp:DropDownList>
</div>
<div>
<table>
<tr>
<td width="100%" nowrap height="16">
<img border="0" src="Images/GREENSQUARE.gif" width="16" height="16"><b><font size="2" face="Arial">
<asp:HyperLink ID="hypIntroduction" runat="server" NavigateUrl="Overview.htm"
meta:resourcekey="hypIntroductionResource1" >[hypIntroduction]</asp:HyperLink>
</tr>
<tr>
<td width="100%" nowrap height="16">
<img border="0" src="Images/GREENSQUARE.gif" width="16" height="16"><b><font size="2" face="Arial">
<asp:HyperLink ID="hypGlobalGradingMethodology" runat="server" NavigateUrl="GGMethodology.htm"
meta:resourcekey="hypGlobalGradingMethodologyResource1" >[hypGlobalGradingMethodology]</asp:HyperLink>
</td>
</tr>
<tr>
<td width="100%" nowrap height="16">
<img border="0" src="Images/Redsquare.gif" width="16" height="16"><b><font size="2" face="Arial">
<asp:HyperLink ID="hypDeterminingBusiness" runat="server"
NavigateUrl="ScopematrixGeneral.htm"
meta:resourcekey="hypDeterminingBusinessResource1">[hypDeterminingBusiness]</asp:HyperLink>
</td>
</tr>
<tr>
<td width="100%" nowrap height="16"><font size="2" face="Arial">
<img border="0" src="Images/BLUEBULLET.gif" width="16" height="16">
<asp:HyperLink ID="hypMethodology" runat="server"
NavigateUrl="methodology.htm"
meta:resourcekey="hypMethodologyResource1">[hypMethodology]</asp:HyperLink>
</font>
</td>
</tr>
</table>
</div>
在后面的代码中,我有以下内容:-
string defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString();
protected void Page_Load(object sender, EventArgs e)
{
this.InitializeCulture();
}
protected void InitializeCulture()
{
if (String.IsNullOrEmpty(CurrentCulture))
{
CurrentCulture = defaultLanguage;
}
if (!String.IsNullOrEmpty(CurrentCulture))
{
try
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(CurrentCulture);
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
}
catch
{
throw;
}
}
}
public String CurrentCulture
{
get
{
if (null != Session["PreferedCulture"])
return Session["PreferedCulture"].ToString();
else
return "en-US";
}
set
{
Session["PreferedCulture"] = value;
}
}
protected void ddlLangs_SelectedIndexChanged(object sender, EventArgs e)
{
Session["PreferedCulture"] = ddlLangs.SelectedValue;
InitializeCulture();
}
但是,当我在下拉列表中进行更改时,文化仍然相同。通常,当应用于 System.Web.UI.Page 时,我会覆盖 InitializeCulture(),但是我找不到在 ascx 中执行此操作的方法。
我怎样才能做到这一点?
感谢您的帮助和时间
-------------新代码------------------------ ------------
我决定让事情变得更简单,并且我已经设法实现了我想要的,但是我完全不喜欢并希望没有的页面刷新。
所以基本上我已经创建了一个现在正在运行的简单示例:-
Site.Master 只是将下拉菜单作为额外代码:-
<div>
<asp:DropDownList ID="ddlLangs" runat="server" onselectedindexchanged="ddlLangs_SelectedIndexChanged" AutoPostBack="True"
meta:resourcekey="ddlLangsResource1">
<asp:ListItem Text="English" Value="en-US"
meta:resourcekey="ListItemResource1" ></asp:ListItem>
<asp:ListItem Text="German" Value="fr-FR" meta:resourcekey="ListItemResource2" ></asp:ListItem>
<asp:ListItem Text="Spanish" Value="it-IT"
meta:resourcekey="ListItemResource3" ></asp:ListItem>
</asp:DropDownList>
</div>
后面的代码如下所示:-
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["PreferredCulture"]!= null)
ddlLangs.SelectedValue = Session["PreferredCulture"].ToString();
}
}
protected void ddlLangs_SelectedIndexChanged(object sender, EventArgs e)
{
Session["PreferredCulture"] = ddlLangs.SelectedValue;
Server.Transfer(Request.Path);
}
Default.aspx 具有 MainMenu UC 和示例标签,但是它继承自 BasePage:-
<asp:Content ID="MenuContent" runat="server" ContentPlaceHolderID="MainMenuContent">
<uc:MainMenu runat="server" ID="ucMainMenu" />
欢迎使用 ASP.NET!
</asp:Content>
BasePage 有初始化文化的代码
我希望摆脱 Server.Transfer(Request.Path),避免刷新页面,但是我还没有找到方法。
任何帮助/想法将不胜感激!
谢谢