2017-03-18 70 views
0

請幫忙我該怎麼做。當頁面重定向 下面是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

什麼主題發生了變化,你可以詳細解釋一下 – PRABA

+0

重定向是怎麼發生的? Autopostback中的下拉列表爲真。因此,當您選擇其中的值時,它將回復帶有在其中選擇的值的表單。「PreInit」從Request對象中獲取該值,並更改頁面的主題。你在這裏有什麼要求? –

+0

感謝PRABA ..當我通過下拉改變我的主題,然後它發佈後更改但是當我刷新我的頁面默認(第一主題)出現。但我想讓我的主題靜止,當我刷新頁面主題不應該受到影響。 –

回答

0

我建議你集中選擇在PreRender事件處理程序的主題值,而不是PreInit因爲ASPX page life cycle的作品。

下面是從原始的代碼修改後的版本

<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,您可以將選定的值保存到會話變量中。然後在頁面重新加載後從會話中讀取此值。查看上面添加的代碼片段。

+0

這不會起作用,因爲在刷新時'ddlTheme'將不具有用戶以前選擇的值。請參閱我對ops問題的評論。 – CodingYoshi