引发主控件事件后加载内容页面

Load content page after master control event is raised

我在 asp.Net 中有一个母版页和母版页的一些子内容页。 在母版页中,我有一个 Drop Down 控件:

<asp:DropDownList ID="languageSelect" runat="server"  AutoPostBack="True" OnSelectedIndexChanged="seletedLanguageChanged">
    <asp:ListItem Value="English">English</asp:ListItem>
    <asp:ListItem Value="French">French</asp:ListItem>
</asp:DropDownList>

母版页后面的代码:

public void seletedLanguageChanged(object sender, EventArgs e)
{
    Session.Add(Settings.LanguageParameters.LanguageParams, languageSelect.SelectedValue);
}

现在在主页中,我正在检查下拉值并基于它呈现页面:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) 
    {
        Session.Add(Settings.LanguageParameters.LanguageParams, "English");
    }
    string language = Session["LanguageParams"].ToString();
    if (language == "English")
    {
        englishTable.Style.Add("display", "normal");
        frenchTable.Style.Add("display", "none");   
     }
     else
     {
         frenchTable.Style.Add("display", "normal");
         englishTable.Style.Add("display", "none");
     }
}    

问题是,当我更改下拉选择(例如:从 "English" 到 "French")时,Home Page_Load 方法在 seletedLanguageChanged 之前执行被触发,导致主页执行 if (language == "English") 部分,然后 seletedLanguageChanged 被触发。

如何防止 Home Page_Load 方法在 seletedLanguageChanged 被触发之前执行?

谢谢:)

你不能。您可以做的是将逻辑移动到确实发生在 Page_Load 之后和控制事件(如 OnSelectedIndexChanged)之后的 OnPreRender 事件。所以清理你的 Page_Load 并改用它:

protected override void OnPreRender(EventArgs e)
{
  base.OnPreRender(e);
  if (!IsPostBack) 
  {
      Session.Add(Settings.LanguageParameters.LanguageParams, "English");
  }
  string language = Session["LanguageParams"].ToString();
  if (language == "English")
  {
      englishTable.Style.Add("display", "normal");
      frenchTable.Style.Add("display", "none");   
   }
   else
   {
       frenchTable.Style.Add("display", "normal");
       englishTable.Style.Add("display", "none");
   }
}