Master Pages母版页(一夫多妻制)综述总结
一、母版页的优点
1、能有效达到网站中所有页面的一致性效果。
2、在设计阶段就能预览网页版面。
3、维护网页版面容易
4、可依用户个人喜好而弹性变换。
微软官方对于Master Pages的优点概述:
1、集中页面的通用功能,让您在一个位置就能更新。
2、轻松创建一组控件和程序代码,并且将结果套用至一组页面。如,可以使用母版页上的控件,创建套用至所有页面的菜单。
3、控制预留位置控件的呈现方式,可以更细腻地完稿页面的配置样式。
4、对象模型,让您可以从个别内容页面自定义母版页。
二、Master Pages的创建
1、在项目中加入母版页
2、 先 删除界面中默认的ContentPlaceHolder,母版页布局完成后再加入ContentPlaceHolder: <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
3、布局完成,在标准控件中重新加入ContentPlaceHolder
三.使用Master Pages创建内容页的常见方法
方法一:在Master Pages文件中选择添加内容
在MasterPage.Master上按鼠标右键选择【添加内容页】(见下图)
方法二:在添加新的Web Form中指定母版页。注意要将【选择母版页】打勾。
方法三:直接后台更改代码。
1、 去掉下面代码
<html xmlns="http://www.w3.org/1999/xhtml" ></html>
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
</form>
</body>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2、加入MasterPageFile="~/StudentManage.Master,Title="学生管理系统管理员主页",
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
</asp:Content>
即<%@ Page Language="C#" MasterPageFile="~/StudentManage.Master" AutoEventWireup="true" CodeBehind="adminmainpage.aspx.cs" Inherits="StudentsManagement.Admin.adminmainpage" Title="学生管理系统管理员" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
</asp:Content>运行查看效果图如下:
四、Master Pages的嵌套使用
1、创建最上层母版页Parent.Master:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Parent.master.cs" Inherits="MasterpagesTest.Parent" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1> 这是第一层,即最外面的母版页Parent.Master !!</h1>
<asp:ContentPlaceHolder id="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
2、创建第二层母版页Child.Master:
<%@ Master Language="C#" AutoEventWireup="true" MasterPageFile="~/Parent.Master" CodeBehind="Child.master.cs" Inherits="MasterpagesTest.Child" %>
<asp:Content id="Content1" ContentPlaceHolderID="MainContent" runat="server">
<h2> 这是第二层,即次外面的母版页Child.Master !!</h2>
<asp:ContentPlaceHolder ID="ChildContent1" runat="server"/>
</asp:Content>
3、创建最终内容页:
<%@ Page Language="C#" MasterPageFile="~/Child.Master" AutoEventWireup="true" CodeBehind="Content.aspx.cs" Inherits="MasterpagesTest.Content" Title="无标题页" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ChildContent1" runat="server">
最终内容页Content.aspx!!
</asp:Content>
运行结果如下:
嵌套母版页的缺点:VS2005 IDE不支持嵌套Master Pages的可视化设计,即一旦使用嵌套母版页,除了最上层母版页可视化外,其底下的母版页一直到内容页都会被强制限定在HTML标签模式下,而无法切换到设计模式。这样在设计阶段会很不方便,万一发生错误,排错更是困难。这算是VS2005IDE不人性化的缺点。
以上嵌套母版页刚开始练习运行出错属正常现象,多练几次就可!
五、Master.Page母版页作用范围设置
1、页面层生效:
<%@ Master Language="C#" MasterPageFile="~/Parent.Master"%>
2、应用程序层生效:
<pages masterPageFile="~/Parent.Master"/>
内容页:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Content.aspx.cs" Inherits="MasterpagesTest.Content" Title="无标题页" %>
<asp:Content id="Content1" contentplaceholderid="MainContent" runat="server">
<p> 最终内容页Content.aspx!!</p>
</asp:Content>
3、文件夹层生效:
文件夹层和应用程序层差不多,而它是在个别目录中声明Web.config,这样该目录会优先套用文件夹层所声明的<pages masterPageFile="~/Parent.Master"/>
六、如何获取母版页相关对象
此用FindControl即可,
如: TreeView myTreeView = (TreeView)Master.FindControl("TreeView1");
if (myTreeView != null)
{
for (int i = 0; i < myTreeView.Nodes[0].ChildNodes.Count; i++)
{ txtMsg.Text += myTreeView.Nodes[0].ChildNodes[i].Text + "<br/>"; }
}
具体上百度找,此不再赘述。