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

时间:2015-01-12 13:56:16

标签: c# asp.net master-pages

我在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被触发之前正在执行Home seletedLanguageChanged方法,这导致了if (language == "English")部分,然后seletedLanguageChanged被解雇。

如何在Page_Load被解除之前阻止首页seletedLanguageChanged方法执行?

感谢:)

1 个答案:

答案 0 :(得分:2)

你做不到。您可以做的是将逻辑移动到在{Page_Load之后和控制事件之后发生的OnPreRender事件(如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");
   }
}