Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 页面在重定向时更改其主题。我不想改变_C#_Asp.net - Fatal编程技术网

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

C# 页面在重定向时更改其主题。我不想改变,c#,asp.net,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:Drop

请帮忙我该怎么办。当页面重定向时,我的主题被更改 下面是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>

我建议您在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;
}
更新

我最初的建议只适用于回发,因为当页面重新加载时,新的页面生命周期开始,从下拉列表中选择的值将丢失


但是,有一种方法可以保持更改,那就是使用会话。为此,您将在SelectedIndexChanged上附加一个新的事件处理程序,从中可以将所选值保存到会话变量中。然后在页面重新加载后从会话中读取该值。请参阅上面添加的代码片段

你能详细解释一下重定向是如何发生的吗?下拉列表lilst Autopostback是正确的。。因此,当您在表单中选择值时,它将使用在表单中选择的值发回表单。。PreInit从请求对象获取该值并更改页面的主题。你的要求是什么?谢谢你,普拉巴。。当我通过下拉菜单更改主题时,它会在回发时更改,但当我刷新页面时,会出现默认的第一个主题。但我想让我的主题保持静态,这样当我刷新页面主题时就不会受到影响。谢谢@ChetanRanpariya..我无法理解你的要求。刷新页面时,会出现默认的第一个主题。那么,当你刷新页面时,静态主题是什么意思呢?这将不起作用,因为在刷新时,DDLSetheme将不具有用户先前选择的值。见我对问题的评论。
<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;
}