页面在重定向时更改其主题。我不想改变

时间:2017-03-18 03:43:47

标签: c# asp.net

请帮助我该怎么办。页面重定向时,我的主题会更改 这是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);
}

1 个答案:

答案 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,您可以在其中将所选值保存到会话变量中。然后在页面重新加载后从会话中读取此值。请参阅上面添加的代码段。