簡體   English   中英

引發主控件事件后加載內容頁面

[英]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");
     }
}    

問題是,當我更改下拉選擇(例如,從“英語”更改為“法語”)時,將在觸發seletedLanguageChanged之前執行Home Page_Load方法,這將導致主頁執行if (language == "English")部分,然后seletedLanguageChanged

如何在seletedLanguageChanged之前阻止Home 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");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM