Hi I'm testing a code sample in asp.net with dropdown list control which changes the MasterPageFile property of the page dynamically and change it to selected value from dropdown list by using page_init() but due to some reason the master page is not changing. The two of the master pages are:
Colorfull.master:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Colorfull.master.cs" Inherits="Professional" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="Style.css" rel="stylesheet" />
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div id="header">
<asp:Label ID="GreetingLabel" runat="server" Text=""></asp:Label>
</div>
<div id="menu">
<asp:Menu ID="Menu1" runat="server" BackColor="#FFFBD6" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#990000" StaticSubMenuIndent="10px">
<DynamicHoverStyle BackColor="#990000" ForeColor="White" />
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<DynamicMenuStyle BackColor="#FFFBD6" />
<DynamicSelectedStyle BackColor="#FFCC66" />
<Items>
<asp:MenuItem Text="Home" Value="Home"></asp:MenuItem>
<asp:MenuItem Text="about" Value="about"></asp:MenuItem>
</Items>
<StaticHoverStyle BackColor="#990000" ForeColor="White" />
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<StaticSelectedStyle BackColor="#FFCC66" />
</asp:Menu>
</div>
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Professional.master
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Professional.master.cs" Inherits="Professional" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="Style.css" rel="stylesheet" />
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div id="header">
<asp:Label ID="GreetingLabel" runat="server" Text=""></asp:Label>
</div>
<div id="menu">
<asp:Menu ID="Menu1" runat="server" BackColor="#E3EAEB" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#666666" StaticSubMenuIndent="10px">
<DynamicHoverStyle BackColor="#666666" ForeColor="White" />
<DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<DynamicMenuStyle BackColor="#E3EAEB" />
<DynamicSelectedStyle BackColor="#1C5E55" />
<Items>
<asp:MenuItem Text="Home" Value="Home"></asp:MenuItem>
<asp:MenuItem Text="about" Value="about"></asp:MenuItem>
</Items>
<StaticHoverStyle BackColor="#666666" ForeColor="White" />
<StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
<StaticSelectedStyle BackColor="#1C5E55" />
</asp:Menu>
</div>
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
default.aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/Professional.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<p>hi this is content </p>
<asp:Literal ID="Literal1" runat="server">name: </asp:Literal> <asp:TextBox ID="name" runat="server" ></asp:TextBox><br />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem>Professional</asp:ListItem>
<asp:ListItem>Colorfull</asp:ListItem>
</asp:DropDownList>
<br />
<asp:Label ID="lb1" Text="" runat="server"/><br />
<asp:Button ID="submit" runat="server" Text="Submit" OnClick="submit_Click" />
</asp:Content>
default.aspx.cs:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Session["template"] = DropDownList1.SelectedValue;
Server.Transfer(Request.Path);
}
protected void Page_PreInit(object sender, EventArgs e)
{
if (Session["template"] != null)
{
MasterPageFile = String.Format("~/{0}.master", (String)Session["template"]);
}
}
however session["template"] contains the value of selected value from the drop down but its not changing the masterfile from Colorfull to Professional and vice versa.