引发主控件事件后加载内容页面
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");
}
}
问题是,当我更改下拉选择(例如:从 "English" 到 "French")时,Home Page_Load
方法在 seletedLanguageChanged
之前执行被触发,导致主页执行 if (language == "English")
部分,然后 seletedLanguageChanged
被触发。
如何防止 Home Page_Load
方法在 seletedLanguageChanged
被触发之前执行?
谢谢:)
你不能。您可以做的是将逻辑移动到确实发生在 Page_Load 之后和控制事件(如 OnSelectedIndexChanged
)之后的 OnPreRender
事件。所以清理你的 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");
}
}
我在 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");
}
}
问题是,当我更改下拉选择(例如:从 "English" 到 "French")时,Home Page_Load
方法在 seletedLanguageChanged
之前执行被触发,导致主页执行 if (language == "English")
部分,然后 seletedLanguageChanged
被触发。
如何防止 Home Page_Load
方法在 seletedLanguageChanged
被触发之前执行?
谢谢:)
你不能。您可以做的是将逻辑移动到确实发生在 Page_Load 之后和控制事件(如 OnSelectedIndexChanged
)之后的 OnPreRender
事件。所以清理你的 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");
}
}