1 ASPX Page, Multiple Master Pages

Posted by csmith18119 on Geeks with Blogs See other posts from Geeks with Blogs or by csmith18119
Published on Wed, 28 Nov 2012 19:49:18 GMT Indexed on 2012/11/28 23:04 UTC
Read the original article Hit count: 171

Filed under:

So recently I had an ASPX page that could be visited by two different user types.  User type A would use Master Page 1 and user type B would use Master Page 2.  So I put together a proof of concept to see if it was possible to change the MasterPage in code.  I found a great article on the Microsoft ASP.net website.

Specifying the Master Page Programmatically (C#) by Scott Mitchell

So I created a MasterPage call Alternate.Master to act as a generic place holder.  I also created a Master1.Master and a Master2.Master.  The ASPX page, Default.aspx will use this MasterPage.  It will also use the Page_PreInit event to programmatically set the MasterPage. 

   1:  protected void Page_PreInit(object sender, EventArgs e) {
   2:      var useMasterPage = Request.QueryString["use"];
   3:      if (useMasterPage == "1")
   4:          MasterPageFile = "~/Master1.Master";
   5:      else if (useMasterPage == "2")
   6:          MasterPageFile = "~/Master2.Master";
   7:  }

 

In my Default.aspx page I have the following links in the markup:

   1:  <p>
   2:      <asp:HyperLink runat="server" ID="cmdMaster1" NavigateUrl="~/Default.aspx?use=1" Text="Use Master Page 1" />
   3:  </p>
   4:  <p>
   5:      <asp:HyperLink runat="server" ID="cmdMaster2" NavigateUrl="~/Default.aspx?use=2" Text="Use Master Page 2" />
   6:  </p>

So the basic idea is when a user clicks the HyperLink to use Master Page 1, the default.aspx.cs code behind will set the property MasterPageFile to use Master1.Master.  The same goes with the link to use Master Page 2. 

It worked like a charm! 

To see the actual code, feel free to download a copy here:

Project Name: Skyhook.MultipleMasterPagesWeb
http://skyhookprojectviewer.codeplex.com

© Geeks with Blogs or respective owner