C# 页面在重定向时更改其主题。我不想改变
请帮忙我该怎么办。当页面重定向时,我的主题被更改 下面是ASP.NET代码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
<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;
}