2016-04-19 12 views
0

私は、テーマをドロップダウンリストで動的に切り替えるためにASP.NETサイトを設定しています。テーマは新しい選択ごとに変化しますが、テーマは正しい選択と一致しません。私のApp_Themesファイルでは、テーマフォルダは "青"、 "灰色"、 "緑"の順に表示されます。新しい選択が行われるたびに、新しい適用テーマが、選択したものに関係なく、その順番に循環します。ASP.NETサイトが間違ったテーマを適用しています

例:初めて新しいテーマを選択すると、青色になります。 2回目は灰色になります。 3番目は緑色で、それ以降も同様です。

私は間違っていますか?

Default.aspxの

<asp:DropDownList ID="ThemeList" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ThemeList_SelectedIndexChanged"> 
    <asp:ListItem Value="Blue">Blue Theme</asp:ListItem> 
    <asp:ListItem Value="Green">Green Theme</asp:ListItem> 
    <asp:ListItem Value="Gray">Gray Theme</asp:ListItem> 
</asp:DropDownList> 

Default.aspx.cs

protected void ThemeList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Session["theme"] = ThemeList.SelectedItem.Value; 
} 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    if(Session["theme"] == null) 
    { 
     Page.Theme = "Blue"; 
    } 

    else 
    { 
     String chosenTheme = Session["theme"].ToString(); 

     switch (chosenTheme) 
     { 
      case "Blue": 
       Page.Theme = "Blue"; 
       break; 
      case "Green": 
       Page.Theme = "Green"; 
       break; 
      case "Gray": 
       Page.Theme = "Gray"; 
       break; 
      case "default": 
       Page.Theme = "Blue"; 
       break; 
     } 
    } 
} 
+0

答えはありませんが、if-else-switchコードの代わりに、Page_PreInitメソッドのコード行を1行に減らすことができます: 'Page.Theme = Session [" theme "]。ToString( )?? "ブルー"; ' –

答えて

0

ここにあなたが達成しようとするもののgood exampleです。

このanswerは、ダイナミックコントロール(ケースのドロップダウンリスト)によって生成されたポストバックがコードの背後でどのように処理されるかを示します。

このpageは、テーマをプログラムして動的に変更するいくつかの方法を提供します。

関連する問題