0

我在母版页中有两个按钮,一个是阿拉伯语,一个是英语,当我单击其中一个按钮时,会话 [“Lang”] 将发生变化。

现在在chiled page我写这个

 protected void Page_Load(object sender, EventArgs e)
{

    if (Session["Lang"] == "en-US")
    {
        Label1.Text = "English";
    }
    else
    {
        Label1.Text = "Arabic";
    }

当我单击按钮更改会话时,子代码将首先执行,然后将转到母版页并运行一个按钮事件来更改会话

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

提前致谢

穆罕默德^_^

4

3 回答 3

1

您需要查看 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 中提供的文化支持。如果您改用该方法,则可以使用类似的方式显示语言。

<%= System.Threading.Thread.CurrentThread.CurrentCulture.DisplayName %>

而不是使用标签控件。

于 2013-08-14T07:37:48.760 回答
1

InitializeCulture 在页面加载之前执行,您应该使用它来更改页面的文化,并在执行后重定向到默认页面的母版页中。

你可以用这个

 protected override void InitializeCulture()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["Lang"].ToString());
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["Lang"].ToString());
        base.InitializeCulture();
    }
于 2013-08-14T07:38:34.920 回答
0

我用这个方法

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

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

于 2013-08-20T09:19:32.500 回答