我在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
方法,这导致了
seletedLanguageChanged
被解雇。
如何在Page_Load
被解除之前阻止首页seletedLanguageChanged
方法执行?
感谢:)
答案 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");
}
}