Asp Net Source.com's BlogAspNetSource's Official Blog

asp.net source code blog

Categories

Archives

2/18/2010 - Why is there an ASP.NET account on my machine
1/16/2010 - How to Open a Redirect in a New Window
1/2/2010 - Convert string to datetime Using C#
12/8/2009 - Using ASP.NET FileUpload to work with Images
11/24/2009 - Detect and Replace URLs in Text using Regex
11/17/2009 - Display RSS Feeds Using XmlDataSource
11/12/2009 - Get Current Theme Programmatically
11/10/2009 - Add Default ListItem to a DropDownList Control
10/20/2009 - GridView with LINQ Programatically
9/28/2009 - Server.HtmlEncode vs HttpUtility.HtmlEncode
8/20/2009 - Get List of sub Directories
7/29/2009 - gridview hide header
7/27/2009 - EmptyDataText Property in the Repeater Control
7/11/2009 - XmlDataSource GridView Example
7/5/2009 - Displaying multiple static paths by single page
6/8/2009 - Categories of classes in the System.Security.Cryptography Namespace
6/1/2009 - Delayed Loading of Page Parts
5/7/2009 - Using MySql in ASP.NET project, cofiguring, exaples with SqlDataSource, GridView, etc
4/29/2009 - What Are You Coding Right Now
4/23/2009 - Concat Byte Arrays in C Sharp
4/13/2009 - Visual Studio 2010 is Coming
3/16/2009 - automatic refresh page in some interval with javascript
2/21/2009 - we have just launched a new asp.net related site
2/18/2009 - Try Catch vs. Using
2/10/2009 - How to Set Language in web.config
1/30/2009 - A New Site for Free Online Test for Developers
1/21/2009 - Easy way to send email from gmail account using ASP.NET 3.5
1/15/2009 - Easy way to Dispaly a Word Document in Web Page
12/20/2008 - Create Yes No Voting Control
12/20/2008 - Our Team
12/15/2008 - Select xml node by other node
12/3/2008 - Forget about tedious mistakes when Validate through W3C
11/19/2008 - Fields removed when Download our Products
11/13/2008 - How to select all text in textbox when it gets focus
11/7/2008 - LINQ DataContext Class
11/3/2008 - PNGs and Browser Support
10/28/2008 - Check site loading by different locations in the world
10/27/2008 - Fix the SQL Connection Problems
10/26/2008 - Encrypt Connection Information
10/25/2008 - Generate Sitemap for your Site
10/23/2008 - Introduction to Design Patterns
10/21/2008 - Differences between Components, Controls, and Behaviors
10/20/2008 - What Is LINQ to SQL
10/19/2008 - Evolution of SQL Server
10/16/2008 - Loading Master Pages Dynamically in ASP.NET 3.5
10/15/2008 - A Brief Overview of Validation in ASP.NET 3.5
10/14/2008 - Automatically Hiding the Login Control from Authenticated Users
10/9/2008 - Check the load time of your website
10/5/2008 - Screw it, Lets RE-Design it all
10/2/2008 - Additional ASP.NET AJAX Libraries
9/29/2008 - The Big Problem of WYSIWYG Editors
9/29/2008 - New Forum for ASP.NET and Web Started
9/25/2008 - Optimize Page Loading Part 2 - Tips When work with Images
9/23/2008 - 10 Design Tips
9/19/2008 - C Sharp Features in Framework 3.0
9/15/2008 - Optimize Page Loading - 20 General Tips and Tricks
9/7/2008 - what is asp.net
9/5/2008 - Why Client Validation is not enough to secure our web app
8/29/2008 - Optimize Page Loading when works with DataBase
8/20/2008 - Highlight text in GridView using javascript
8/4/2008 - ContentPlaceHolder in title tag, Is That Bug in VS 2008
8/1/2008 - Why should we use ResolveUrl
7/31/2008 - Guid.TryParse in Framework 3.5
7/30/2008 - Redirect to current page
7/28/2008 - Validate Max Length of TextBox text
7/24/2008 - Easiest way for Row Numbering in GridView
7/23/2008 - Framework 3.5 Disadvantage of lamda expressions
7/21/2008 - LINQ - display filed from parent table in LinqDataSource and GridView
7/17/2008 - LinqDataSource and Guid passed as QueryStringParameter
7/14/2008 - Inappropriate name of DetailsView in msdn
7/9/2008 - Hide form after user download file
7/7/2008 - Menu in Master Page. How to set selected item from Page
7/4/2008 - Overview of New in Framework 3.5
7/2/2008 - New in Framework 3.5 - Generic Class HashSet
7/2/2008 - Present XmlDataSource data with Repeater
7/1/2008 - How to Validate ImageButton control through W3C
6/30/2008 - Using Find Method in Generic Controls With VB.NET - List
6/30/2008 - Using Find Method in Generic Controls With CSharp - List of T
6/30/2008 - Script injections using ASP.NET

Links

 

Loading Master Pages Dynamically in ASP.NET 3.5

Posted by Tihomir Ivanov on 16 October 2008 04:48
Rating: 0.00

You can associate different Master Pages dynamically with a content page. This is useful in
two situations.
First, you can enable the users of your website to customize the appearance of the website
by loading different Master Pages. You can display a menu of Master Pages, and allow your
users to pick their favorite layout.
Another situation in which loading Master Pages dynamically is useful concerns co-branding.
Imagine that your company needs to make its website look like a partner website.
When users link to your website from the partner website, you don’t want users to know
that they are traveling to a new website. You can maintain this illusion by dynamically
loading different Master Pages based on a query string passed from a partner website.
A Master Page is merged with a content page very early in the page execution life-cycle.
This means that you cannot dynamically load a Master Page during the Page Load event.
The only event during which you can load a Master Page is during the Page PreInit
event. This is the first event that is raised during the page execution life cycle.

<%@ Page Language=”C#” MasterPageFile=”~/Dynamic1.master” %>
<script runat=”server”>
protected void Page_PreInit(object sender, EventArgs e)
{
 if (Request[“master”] != null)
 {
  switch (Request[“master”])
  {
   case “Dynamic1”:
    Profile.MasterPageFile = “Dynamic1.master”;
    break;
   case “Dynamic2”:
    Profile.MasterPageFile = “Dynamic2.master”;
    break;
  }
 }
 MasterPageFile = Profile.MasterPageFile;
}
</script>
<asp:Content
ID=”Content1”
ContentPlaceHolderID=”ContentPlaceHolder1”
Runat=”Server”>
Select a Master Page:
<ul class=”selectMaster”>
<li>
<a href=”DynamicContent.aspx?master=Dynamic1”>Dynamic Master 1</a>
</li>
<li>
<a href=”DynamicContent.aspx?master=Dynamic2”>Dynamic Master 2</a>
</li>
</ul>
</asp:Content>

The page contains two links. Both links include a query string parameter
named master, which represents the name of a Master Page. When you click the first link,
the Dynamic1.master Master Page is loaded and when you click the second
link, the Dynamic2.master Master Page is loaded.
Notice that the page 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 persists the values of its properties for a user across multiple
visits to a website. The Profile is defined in the web configuration file:

<configuration>
<system.web>
<profile>
<properties>
<add
name=”MasterPageFile”
defaultValue=”Dynamic1.master” />
</properties>
</profile>
</system.web>
</configuration>

Loading Master Pages Dynamically for Multiple Content Pages

In the previous section, you learned how to load a Master Page dynamically for a single
page in a website. However, what if you need to load a Master Page dynamically for every
content page in a website?
The easiest way to apply the same logic to multiple content pages is to create a new base
Page class.

using System;
using System.Web.UI;
using System.Web.Profile;
public class DynamicMasterPage : Page
{
 protected override void OnPreInit(EventArgs e)
 {
  this.MasterPageFile = (string)Context.Profile[“MasterPageFile”];
  base.OnPreInit(e);
 }
}
The class DynamicMasterPage inherits from the Page class. However, it overrides the base Page
class’s OnPreInit() method and adds the logic for loading a Master Page dynamically.
After you create a new base Page class, you need to register it in the web configuration file.
The web configuration file contains the necessary settings.

<configuration>
<system.web>
<pages pageBaseType=”DynamicMasterPage” />
<profile>
<properties>
<add
name=”MasterPageFile”
defaultValue=”Dynamic1.master” />
</properties>
</profile>
</system.web>
</configuration>

After you register the DynamicMasterPage class as the base Page class, every page in your
application automatically inherits from the new base class. Every page inherits the new
OnPreInit() method and every page loads a Master Page dynamically.

 Comments:
au Posted by Terry Walker on 19 January 2009 04:38   Rating: -
Wow, I never knew that Loading Master Pages Dynamically in ASP.NET 3.5. That’s pretty interesting...
au Posted by Raymond Kirk on 17 January 2009 02:14   Rating: -
Wow, I never knew that Loading Master Pages Dynamically. That's pretty interesting...
 Add New Comment:
Name*:    Rating:
E-mail*:
Website:
Country:  Country flag
Comment*:
B I U url img quote                                    
Created By AspNetSource.com
Are you human ?      


 
Asp Net Source.com


 
Our Sponsors:  Asp.net file upload component  |   Flash file uploader