Introduction
Today most of the websites
uses different Master Pages dynamically with a content page depending upon the
request. This is very-very useful in two situations as given below.
- We can enable the users of our website to
customize the appearance of the website by loading different Master Pages.
We can display a menu of Master Pages, and allow our users to pick their
favorite layout.
- Another one situation in which loading
Master Pages dynamically is useful concerns co-branding or even saydifferent
users from different geographical area. Imagine that our company needs to
make its website look like a partner website. When users link to our website
from the partner website, we don't want users to know that they are
traveling to a new website. We can maintain this illusion by dynamically
loading different Master Pages based on a query string passed from a partner
website.
Master Page is merged
with a content page very early in the page execution life-cycle. This means that
we cannot dynamically load a Master Page during the Page_Load()
event. The only event during which we can load a Master Page is during the Page
PreInit()
event that is Pre-Initialization. This is the first event that is raised during
the page execution life cycle.
For example, the given
below dynamically loads one of two Master Pages named
DynamicMaster1.master
and
DynamicMaster2.master,
here it is.
Code of
Default.aspx Page
<%@
Page Title=""
Language="VB"
MasterPageFile="~/DynamicMaster1.master"
%>
<script
runat="server">
Protected
Sub Page_PreInit(ByVal
sender As Object,
ByVal e As
EventArgs)
If
Not Request("master")
Is Nothing
Then
Select
Case Request("master")
Case
"DynamicMaster1"
Profile.MasterPageFile =
"DynamicMaster1.master"
Case
"DynamicMaster2"
Profile.MasterPageFile =
"DynamicMaster2.master"
End
Select
End
If
MasterPageFile =
Profile.MasterPageFile
End
Sub
</script>
<asp:Content
ID="Content1"
ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
Select a Master Page:
<ul
class="selectMaster">
<li>
<a
href="Default.aspx?master=DynamicMaster1">DynamicMaster
1</a>
</li>
<li>
<a
href="Default.aspx?master=DynamicMaster2">DynamicMaster
2</a>
</li>
</ul>
</asp:Content>
Code of
DynamicMaster1.master Page
<%@
Master Language="VB"
%>
<!DOCTYPE
html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script
runat="server">
</script>
<html
xmlns="http://www.w3.org/1999/xhtml">
<head
runat="server">
<style
type="text/css">
html
{
background-color:Purple;
}
.content
{
margin:auto;
width:700px;
background-color:Lime;
padding:10px;
}
h1
{
border-bottom:solid
4px black;
}
</style>
<title>************YAHOO
INTERNATIONAL************</title>
</head>
<body>
<form
id="form1"
runat="server">
<h1>YAHOO
INTERNATIONAL !</h1>
<div
id="dynamicms1"
class="content">
<asp:ContentPlaceHolder
id="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Code of
DynamicMaster2.master Page
<%@
Master Language="VB"
%>
<!DOCTYPE
html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script
runat="server">
</script>
<html
xmlns="http://www.w3.org/1999/xhtml">
<head
runat="server">
<style
type="text/css">
html
{
background-color:Maroon;
}
.content
{
margin:auto;
width:700px;
background-color:Aqua;
padding:10px;
}
h1
{
border-bottom:solid
4px black;
}
</style>
<title>************YAHOO
INDIA************</title>
</head>
<body>
<form
id="form1"
runat="server">
<h1>YAHOO
INDIA !</h1>
<div
id="dynamicms1"
class="content">
<asp:ContentPlaceHolder
id="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
Code of Web.config File
<?xml
version="1.0"?>
<configuration>
<system.web>
<compilation
debug="true"
targetFramework="4.0"/>
</system.web>
<system.web>
<profile>
<properties>
<add
name="MasterPageFile"
defaultValue="DynamicMaster1.master"
/>
</properties>
</profile>
</system.web>
</configuration>
There is some points we
have to notice that the page Default.aspx given above includes a
Page_PreInit()
event handler. This handler grabs the value of the master query string parameter
and assigns the value of this parameter to a
Profile
property. Next, the value of the
Profile
property is assigned to the page's
MasterPageFile
property. Assigning a value to the
MasterPageFile
property causes a Master Page to be dynamically loaded. Because the name of the
Master Page is assigned to a
Profile
property, the selected Master Page loads for a user even if the user returns to
the website many years in the future. The
Profile
object automatically persist the values of its properties for a user across
multiple visits to a website. The
Profile
is defined in the web configuration file contained above.
HAVE
A GREAT CODING!