引发主控事件后加载内容页
本文关键字:加载 事件 | 更新日期: 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");
}
}