母版页为具有扩展名 .master(如 MySite.master)的 ASP.NET 文件,它具有可以包括静态文本、HTML 元素和服务器控件的预定义布局。母版页由特殊的 @ Master 指令识别,该指令替换了用于普通 .aspx 页的 @ Page 指令。该指令类看起来类似下面这样。
<%@ Master Language="C#" %>除会在所有页上显示的静态文本和控件外,母版页还包括一个或多个ContentPlaceHolder控件。这些占位符控件定义可替换内容出现的区域。接着在内容页中定义可替换内容。
内容页
<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
</asp:Content>
母版页中创建为 ContentPlaceHolder 控件的区域在新的内容页中显示为 Content 控件。
显示剩下的母版页内容,以便您查看布局,但这些内容显示为浅灰色,因为您在编辑内容页时不能更改这些内容。
母版页具有下面的优点:
1.使用母版页可以集中处理页的通用功能,以便可以只在一个位置上进行更新。
2.使用母版页可以方便地创建一组控件和代码,并将结果应用于一组页。例如,可以在母版页上使用控件来创建一个应用于所有页的菜单。
3.通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终页的布局。
4.母版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页。
母版页的运行时行为
在运行时,母版页是按照下面的步骤处理的:
1.用户通过键入内容页的 URL 来请求某页。
2.获取该页后,读取 @ Page 指令。如果该指令引用一个母版页,则也读取该母版页。如果这是第一次请求这两个页,则两个页都要进行编译。
3.包含更新的内容的母版页合并到内容页的控件树中。
4.各个 Content 控件的内容合并到母版页中相应的 ContentPlaceHolder 控件中。
5.浏览器中呈现得到的合并页。
如何:引用 ASP.NET 母版页的内容
可以在内容页中编写代码来引用母版页中的属性、方法和控件,但这种引用有一定的限制。对于属性和方法的规则是:如果它们在母版页上被声明为公共成员,则可以引用它们。这包括公共属性和公共方法。在引用母版页上的控件时,没有只能引用公共成员的这种限制。
引用母版页上的公共成员
1.在内容页中添加 @ MasterType 指令。在该指令中,将 VirtualPath 属性设置为母版页的位置,如下面的示例所示:<%@ MasterType virtualpath="~/Masters/Master1.master" %> 此指令使内容页的 Master 属性被强类型化。
2.编写代码,将母版页的公共成员用作 Master 属性的一个成员,如本例中,将母版页名为 CompanyName 的公共属性的值赋给内容页上的一个文本框
引用母版页上的控件
使用 FindControl 方法,将 Master 属性的返回值用作命名容器。
下面的代码示例演示如何使用 FindControl 方法获取对母版页上的两个控件的引用(一个 TextBox 控件和一个 Label 控件)。因为 TextBox 控件处在 ContentPlaceHolder 控件的内部,必须首先获取对 ContentPlaceHolder 的引用,然后使用其 FindControl 方法来定位 TextBox 控件。
void Page_Load()
{
母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用。它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形成一张漂亮的婚纱照片,这样可以大大简化婚纱艺术照的设计复杂度。这里的母版页就像婚纱模板,而内容页面就像两位新人的照片。
在VS2003中没有母版页,要实现这种设计重用的效果,我们只能用“用户控件”来实现,但用户控件没有一种可视化的组合外观,使用起来不太方便。
母版页(扩展名是.master)
它的使用跟普通的页面一样,可以可视化的设计,也可以编写后置代码。与普通页面不一样的是,它可以包含ContentPlaceHolder控件,ContentPlaceHolder控件就是可以显示内容页面的区域。
代码如下:
<%@ Master Language="C#" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
......
......
注意:
内容页(扩展名是.aspx)
在建立内容页面的时候,在“添加新项”对话框中要选中“选择母版页”复选框。这样建立的页面就是内容页面,内容页面在显示的时候会把母版面的内容一起以水印淡化的形式显示出来,而在母版页中的ContentPlaceHolder控件区域会被内容页面中的Content控件替换,程序员可以在这里编写内容页面中的内容。
代码如下:
<%@ Page Language="C#" MasterPageFile="~/MasterPage/MP.master" CodeFile="Show1.aspx.cs" Inherits="MasterPage_Show1" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>
注意:
一、在母版页中编写后台代码,访问母版页中的控件:
二、在内空页面中编写后台代码,访问内容页面中的控件:
三、在内容页面中编写代码访问母版页中的控件:
四、在内容页面中编写代码访问母版页中的属性和方法: