如何在执行IsPostBack中的子页代码之前在母版页中运行方法
本文关键字:运行 方法 代码 母版页 执行 IsPostBack | 更新日期: 2023-09-27 18:27:32
主页中有两个按钮,一个用于阿拉伯语,另一个用于英语当我点击其中一个按钮时,会话["Lang"]将发生变化。
现在在智利页我写了这个
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Lang"] == "en-US")
{
Label1.Text = "English";
}
else
{
Label1.Text = "Arabic";
}
当我点击按钮更改会话时,子级中的代码将首先执行,然后转到主页并运行butn事件来更改会话
任何人都有任何想法在子页面之前调用按钮事件
提前感谢
穆罕默德^_^
InitializeCulture在页面加载之前执行,您应该使用它来更改页面的区域性,执行后在母版页中重定向到默认页面。
你可以使用这个
protected override void InitializeCulture()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["Lang"].ToString());
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["Lang"].ToString());
base.InitializeCulture();
}
您需要了解ASP.NET Webforms页面的生命周期,以便了解发生什么情况。
以下是一些相关文档:http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx#lifecycle_events
目前的问题是,按钮单击事件发生在Page_Load
事件之后,因此当您单击按钮时,您可能会体验到Label1.Text
在"后面"单击一次。
例如,查看文档并将Label1.Text
赋值放在PreRender
中。
就像@ArabicProgrammer的回答一样,最好还是实际利用.NET Framework中提供的Culture支持。如果使用该方法,则可以使用类似的方法显示语言。
<%= System.Threading.Thread.CurrentThread.CurrentCulture.DisplayName %>
而不是使用Label控件。
我使用这个方法
protected override void InitializeCulture()
{
}
在这个方法中,我得到了这个的事件目标(按钮的ID)
protected override void InitializeCulture()
{
string language = Request["__EventTarget"];
if (!string.IsNullOrEmpty(language))
{
if (language.EndsWith("Ar"))
{
languageId = "ar-SA";
}
else if (language.EndsWith("En"))
{
languageId = "en-US";
}
}
因此,会话将首先更改,然后加载页面,然后加载母版页。