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

本文关键字:加载 事件 | 更新日期: 2023-09-27 18:37:09

我在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");
     }
}    

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

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

谢谢:)

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

你不能。您可以做的是将逻辑移动到OnPreRender在Page_Load之后和之后发生的事件(如OnSelectedIndexChanged)。因此,请清理您的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");
   }
}