这是我的问题。我有一个母版页,其中包含一些用于设置网页语言的标记。
在母版页内我有一个包含菜单项的用户控制器。这些菜单项取决于选择的标志,它会改变。
当我查看Web应用程序的生命周期时,首先运行mainpage_loader,然后运行用户控件加载器,最后, 运行主页面内定义的功能(标志按钮功能)。
但我需要的是在用户控件内获取会话值。取决于此会话值,加载菜单取决于所选语言。 但在这种情况下,我从未捕获会话值,在用户控件内部,因为在通过步骤母版页功能之后。 我怎么解决这个问题。感谢。
我的主页
protected void Page_Load(object sender, EventArgs e)
{
if (Session["lang"]==null)
{
Session["lang"] = "m_en";
}
else
{
}
}
[DirectMethod(IDMode = DirectMethodProxyIDMode.None)]
public void Change_Lang_Event(string lang)
{
CultureInfo ci;
switch (lang)
{
case "m_tr":
ci = new CultureInfo("tr-TR");
Session["lang"] = "m_tr";
//problem is here I coulnt reach Language properti
((UserControl)Page.Master.FindControl("MyMenu1")).Language = Session["lang"].ToString();
break;
case "m_en":
ci = new CultureInfo("en-US");
Session["lang"] = "m_en";
break;
case "m_ru":
ci = new CultureInfo("ru-RU");
Session["lang"] = "m_ru";
default:
ci = new CultureInfo("tr-TR");
Session["lang"] = "m_tr";
break;
}
我的USERCONTROL:
public partial class MyMenu : System.Web.UI.UserControl
{
static List<Ofis> lst;
static CultureInfo cim;
string dilSesion = "";
private string _languages;
public string Languages
{
get { return _languages; }
set { _languages = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
dilSesion = Session["lang"].ToString();
X.Msg.Alert("Uyarı", dilSesion).Show();
}
}
主要aspx;
<asp:Contentplaceholder id="Contentplaceholder1" runat="server">
<uc1:MyMenu ID="MyMenu1" runat="server" />
</asp:Contentplaceholder>
答案 0 :(得分:1)
如果在UserControl中定义属性,即
private string _language;
public string Language
{
get
{
return _language;
}
get
{
return _language;
}
}
然后你可以在MasterPage代码中设置它:
((UserControl)Page.Master.FindControl('controlID')).Language = Session["lang"].ToString()
请注意,必须将用户控件强制转换为UserControl类。