如何在执行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事件来更改会话

任何人都有任何想法在子页面之前调用按钮事件

提前感谢

穆罕默德^_^

如何在执行IsPostBack中的子页代码之前在母版页中运行方法

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";
            }
       }

因此,会话将首先更改,然后加载页面,然后加载母版页。