请帮助我该怎么办。页面重定向时,我的主题会更改 这是ASP.NET代码
<form id="form1" runat="server">
<div id="dvLeft"></div>
<div id="dvRight"></div>
<div id="dvMiddle"></div>
<div id="dvBottom">
<asp:DropDownList ID="ddlTheme" runat="server" AutoPostBack="True">
<asp:ListItem >FirstTheme</asp:ListItem>
<asp:ListItem>SecondTheme</asp:ListItem>
<asp:ListItem>ThirdTheme</asp:ListItem>
</asp:DropDownList>
</div>
</form>
这是C#代码:
protected override void OnPreInit(EventArgs e)
{
if (Request["ddlTheme"] != null)
{
string theme = Request["ddlTheme"].ToString();
Page.Theme = theme;
}
base.OnPreInit(e);
}
答案 0 :(得分:0)
由于ASPX page life cycle的工作方式,我建议您在PreRender
事件处理程序而非PreInit
中设置所选主题值。
以下是原始代码的修订版
<form id="form1" runat="server">
<div id="dvLeft"></div>
<div id="dvRight"></div>
<div id="dvMiddle"></div>
<div id="dvBottom">
<asp:DropDownList ID="ddlTheme" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlTheme_SelectedIndexChanged">
<asp:ListItem Value="FirstTheme">FirstTheme</asp:ListItem>
<asp:ListItem Value="SecondTheme">SecondTheme</asp:ListItem>
<asp:ListItem Value="ThirdTheme">ThirdTheme</asp:ListItem>
</asp:DropDownList>
</div>
</form>
protected void ddlTheme_SelectedIndexChanged(object sender, EventArgs e)
{
// save value into a session variable
Session["SelectedTheme"] = ddlTheme.SelectedValue;
}
protected void PreRender()
{
// works when page reloads
if (Session["SelectedTheme"] != null){
Page.Theme = Session["SelectedTheme"].ToString();
}
// following line works on postback only
//Page.Theme = ddlTheme.SelectedValue;
}
更新
我的原始建议仅适用于回发,因为当页面重新加载时,新的页面生命周期开始,下拉列表中的选定值将丢失。
但是,有一种方法可以保持更改,即使用会话。为此,您将附加一个新的事件处理程序OnSelectedIndexChanged
,您可以在其中将所选值保存到会话变量中。然后在页面重新加载后从会话中读取此值。请参阅上面添加的代码段。