How to Change Master Page @ Run-time
Introduction
This tip is for those who are looking for basic/advanced knowledge about how to change Master page @runtime and how to render controls @ runtime. This will allow user to save his/her personal settings just like in gmail.
Using the Code
Just download the attached zip file and extract it. This application is developed using ASP.NET 4.0 framework.
Solution explorer view is as below for your reference.
Create a Base class for all Master pages named "BaseMaster". This will handle Page_Load event of all Master Pages.
using System.Web.UI.WebControls; public class BaseMaster : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.RawUrl == "/Settings.aspx")
{
DropDownList drop = new DropDownList();
drop.ID = "DropDownThemes";
drop.Items.Add(new ListItem("Site1", "Site1.Master"));
drop.Items.Add(new ListItem("Site2", "Site2.Master"));
drop.Items.Add(new ListItem("Site3", "Site3.Master"));
drop.Enabled = true;
drop.AutoPostBack = true;
drop.SelectedIndexChanged += new EventHandler(this.drop_SelectedIndexChanged);
if (Session["MasterPage"] != null)
{
drop.SelectedValue = Session["MasterPage"].ToString();
}
try
{
((Site1)this).dropDownTheme = drop;
}
catch
{
try
{
((Site2)this).dropDownTheme = drop;
}
catch
{
((Site3)this).dropDownTheme = drop;
}
}
}
} protected void drop_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
Session["MasterPage"] = ((Site1)this).dropDownTheme.SelectedValue.ToString();
}
catch
{
try
{
Session["MasterPage"] = ((Site2)this).dropDownTheme.SelectedValue.ToString();
}
catch
{
Session["MasterPage"] = ((Site3)this).dropDownTheme.SelectedValue.ToString();
}
} Response.Redirect(Request.Url.AbsoluteUri);
}
}
Here, I am creating a DropDownList control and assigning to MasterPage. Eventhandler "SelectedIndexChanged" is assigned to the same.
Inherit this BaseMaster class to all Master pages, say Site1.Master, Site2.Master, Site3.Master.
public partial class Site1 : BaseMaster
{ public DropDownList dropDownTheme
{
get { return (DropDownList)this.PlaceHolder1.FindControl("DropDownThemes"); }
set { PlaceHolder1.Controls.Add((DropDownList)value); }
}
}
Notice that I added a Public property "dropDownTheme". This property is created because here I am accessing the dropdown control from "BaseMaster" class not in same class "Site1".
HTML of Site1 is here. Same HTML is used in remaining Master page also (Site2.Master and Site3.Master).
<%@ Master Language="C#" AutoEventWireup="true"
CodeBehind="Site1.master.cs" Inherits="WebApplication4.MasterPages.Site1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body style="background-color: Aqua">
<form id="form1" runat="server">
This is Site 1 Master page
<table>
<tr>
<td style="text-align: left">
<h1>
This is Header</h1>
</td>
<td style="text-align: right; color: Red">
<a href="../../Settings.aspx"
id="LinkToSettings">Settings</a>
</td>
</tr>
<tr>
<td>
This is Menu section from Master<br />
<asp:PlaceHolder ID="PlaceHolder1"
runat="server"></asp:PlaceHolder>
</td>
<td>
<fieldset>
<legend>Content Page</legend>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</fieldset>
</td>
</tr>
<tr style="text-align: center">
<td colspan="2">
<small>All Rights Reserved with no one.</small>
</td>
</tr>
</table>
</form>
</body>
</html>
Create a content page "Settings.aspx" HTML is below:
<%@ Page Title="" Language="C#"
MasterPageFile="~/MasterPages/Site1.Master" AutoEventWireup="true"
CodeBehind="Settings.aspx.cs" Inherits="WebApplication4.Settings" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content>
<asp:Content ID="Content2"
ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
This is Settings Page with Master<br>
<asp:Button ID="btnBack" runat="server" Text="Back"
onclick="btnBack_Click" />
<asp:Button ID="btnReset" runat="server" Text="Reset"
onclick="btnReset_Click" />
</asp:Content>
In the code behind page, add the below events:
public partial class Settings : BasePage
{
protected void btnBack_Click(object sender, EventArgs e)
{
Response.Redirect("HomePage.aspx");
} protected void btnReset_Click(object sender, EventArgs e)
{
Session["MasterPage"] = "Site1.Master" ;
Response.Redirect(Request.Url.AbsoluteUri);
}
}
Here, this drop down will render only on Settings.aspx page. If there are any other content pages, dopdown will not be shown as only settings page is designed to allow so.
Create a Class file and write the below code to choose Master page.
public class BasePage : System.Web.UI.Page
{
protected void Page_PreInit(object sender, EventArgs e)
{
if (Session["MasterPage"] != null)
{
MasterPageFile = WebConfigurationManager.AppSettings
["MasterFileFolder"] + Session["MasterPage"].ToString();
}
}
}
All the webpages which will use Master page have to inherit this class. This will handle Page_preInt event for all pages.
Add a master page folder path to .config file:
<appSettings>
<add key="MasterFileFolder" value="~\MasterPages\"/>
</appSettings>
Enjoy the code. 
License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
Share
How to Change Master Page @ Run-time的更多相关文章
- 自定义SharePoint2013 master page
SharePoint uses templates to define and render the pages that a site displays. The structure of a Sh ...
- Creating a New Master Page in SharePoint 2013
Creating a New Master Page in SharePoint 2013 This article explains how to create a Master Page in S ...
- Adding a WebPart to a SharePoint 2013 Master Page 分类: Sharepoint 2015-07-08 01:03 7人阅读 评论(0) 收藏
On SharePoint 2013 you can not add the Web Parts to the master page the same way of 2010. Please use ...
- 通过SharePoint Designer对SharePoint 2010的Master Page进行自定制
1:需要在对应的SiteCollection 和 Site 中开启Publishing的服务 2:在Designer中创建自己的Master Page,进行对原始v4.master代码进行复制,和修改 ...
- sharepoint 2010 页面添加footer方法 custom footer for sharepoint 2010 master page
转:http://blog.csdn.net/chenxinxian/article/details/8720893 在sharepoint 2010的页面中,我们发现,没有页尾,如果我们需要给页面添 ...
- 转载 SharePoint 2013配置Master Page and Page Layout
转载原地址: http://www.cnblogs.com/huangjianwu/p/4539706.html 涉及到的内容是关于SharePoint 2013如何部署自定义的母版页和布局页. 进入 ...
- 【Sharepoint】CSS与Master Page的开发与部署
一.CSS的开发与部署相对比较简单,先是要上传CSS文件到样式库中,然后在页面模板中将上传的自定义CSS样式文件设置为所有文件的默认css文件.下面详细的介绍CSS文件的开发与部署过程. 1.编写自定 ...
- mysql change master导致gtid丢失
change master导致gtid丢失从innobackupex恢复导致binlog的拉取位置会导致主备gtid不一致.此类错误通过构造空事务方式无法修复.此时就需要change master 方 ...
- 安装Docker时错误提示 "could not change group /var/run/docker.sock to docker: group docker not found"的解决方案
安装Dock服务,主要命令是 yum install docker. 但是在启动的时候报错:warning msg="could not change group /var/run/doc ...
随机推荐
- C#文件与文件夹操作
(转自:http://www.csharpwin.com/csharpspace/6649r3960.shtml) C#文件操作:C#追加文件 StreamWriter sw = File.Appen ...
- python基础之模块二
六 logging模块 6.1 函数式简单配置 import logging #导入模块 logging.debug('debug message') #调试消息 logging.debug('inf ...
- How to Have a Healthy Relationship --shanbei 为单身节写
我在扇贝发现一片好文. Sometimes relationships can seem like a lot of work until you sit back and realize just ...
- 【html】html笔记综合
基本标签与属性 <html>全部 <body>主体 <h1>标题 <p>段落 <br>空行,一般都会额外添加,并不总是需要自己添加,可以在& ...
- Ubuntu語言支持爲灰色修復方法
Ubuntu語言支持爲灰色修復方法 在Ubuntu12.04中,在下不知爲何將 語言支持 中 應用到整個系統 和 添加語言 這2個按弄成了灰色,導致ibus不能輸入中文,現在唔將修復方法公告天下: 1 ...
- 使用第三方图表工具——Chart.js
效果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...
- golang:bson.ObjectId与string转化
网上资料不好搜,记下来:两个变量:id bson.ObjectIdstr string bson.ObjectId—>string id.Hex() string—>bson.Object ...
- 一个高性能RPC框架的连接管理
既然说连接,先对EpollServer的连接管理做个介绍吧.客户端与服务器一次conn,被封装成为Connection类在服务器进行管理. 服务器连接有三种类型,分别为: enum EnumConne ...
- 微信小程序-富文本解析插件wxParse基础使用及问题解决
一.插件准备 在github上可以直接下载该插件:https://github.com/icindy/wxParse 二.基本使用 1.将插件导入项目: 将wxParse文件夹放在项目目录下,如图: ...
- linux 下看所有用户 及所有组
俺的centos vps上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表,google了一下,找到方便的放:一般情况下是 cat /etc/passwd 可以查看所有用 ...