This tip will give complete knowledge of how to change master page, render controls and accessing its eventhandlers @ runtime.

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的更多相关文章

  1. 自定义SharePoint2013 master page

    SharePoint uses templates to define and render the pages that a site displays. The structure of a Sh ...

  2. 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 ...

  3. 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 ...

  4. 通过SharePoint Designer对SharePoint 2010的Master Page进行自定制

    1:需要在对应的SiteCollection 和 Site 中开启Publishing的服务 2:在Designer中创建自己的Master Page,进行对原始v4.master代码进行复制,和修改 ...

  5. sharepoint 2010 页面添加footer方法 custom footer for sharepoint 2010 master page

    转:http://blog.csdn.net/chenxinxian/article/details/8720893 在sharepoint 2010的页面中,我们发现,没有页尾,如果我们需要给页面添 ...

  6. 转载 SharePoint 2013配置Master Page and Page Layout

    转载原地址: http://www.cnblogs.com/huangjianwu/p/4539706.html 涉及到的内容是关于SharePoint 2013如何部署自定义的母版页和布局页. 进入 ...

  7. 【Sharepoint】CSS与Master Page的开发与部署

    一.CSS的开发与部署相对比较简单,先是要上传CSS文件到样式库中,然后在页面模板中将上传的自定义CSS样式文件设置为所有文件的默认css文件.下面详细的介绍CSS文件的开发与部署过程. 1.编写自定 ...

  8. mysql change master导致gtid丢失

    change master导致gtid丢失从innobackupex恢复导致binlog的拉取位置会导致主备gtid不一致.此类错误通过构造空事务方式无法修复.此时就需要change master 方 ...

  9. 安装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 ...

随机推荐

  1. php实现安装程序的 安装

    install.php 只要填写数据库就可以把数据插入到数据库中,实现安装 <?php header("Content-type:text/html;charset=utf-8&quo ...

  2. Markdown博文快速转为微信文章

    介绍 技术博文在CSDN上,全是Markdown格式,最近看各位大佬又是个人网站又是个人微信公众号,突然发现: "个人博客小站 + 个人微信公众号 + CSDN + 掘金+ - = 程序员标 ...

  3. 深度学习实战-----0001(移植反向传播Python to c++)

    1. https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/  老外教程 2. https://github. ...

  4. (八)js函数二

    1.变量 a)局部变量:在所有函数内部定义的变量,或者在函数内部未使用var声明的变量也属于全局变量. b)全局变量:在所有函数外部定义的变量. eg: 1)     var a = 5,b = 4, ...

  5. 【前端】HTML入门笔记

    教程 HTML 指的是超文本标记语言 (Hyper Text Markup Language).使用标记标签来描述网页 HTML 提示:使用小写标签\属性\属性参考手册\HTML颜色\HTML颜色名 ...

  6. IDEA Intellij中vim插件使用小技巧

    在 IDEA Intellij小技巧和插件 一文中简单介绍了一下IdeaVim插件.在这里详细总结一下这个插件在日常编程中的一些常用小技巧.供有兴趣使用这个插件,但对Vim还不十分熟悉的朋友参考.当然 ...

  7. vc++ windows获取计算机信息

    在软件开发中,我们经常要获当前系统的版本号,判断当前是什么系统,获取获取物理内存和可用内存大小,获取CPU名称.内核数目.主频,获取MAC地址,获取屏幕分辨率,下面的这个c++类将包含所有这些信息. ...

  8. 复制的web工程为什么不能部署到tomcat

    An existing resource has been found at location D:\apache-tomcat-6.0.18\apache-tomcat-6.0.18\webapps ...

  9. CSS命名规范参考及书写注意事项

    CSS书写顺序 *{ /*显示属性*/ display position float clear cursor … /*盒模型*/ margin padding width height /*排版*/ ...

  10. 更新pip

    python -m pip install pip --upgrade pip要保持最新的,才可以去下载最新的其他的第三方包