在Design状态下我们可以看到如下效果:
有了MasterPage后我们该如何使用?光上面所说的根本解决不了任何问题。下面看看如何使用:
首先建立一个新的aspx页面,记得把Select Master Page项选上:
此时点击Add后会谈出下面这个窗口:
由于目前只有一个MasterPage文件,所以只能选择它,确定后新的Default2.aspx页面被建立,这个时候你会发现Default2.aspx页面中没有标准的html页面的格式,取而代之的是asp.net控件Content,Default2.aspx中的代码如下:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="TopContent" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="LeftContent" Runat="Server"> </asp:Content> <asp:Content ID="Content3" ContentPlaceHolderID="CenterContent" Runat="Server"> </asp:Content> <asp:Content ID="Content4" ContentPlaceHolderID="RightContent" Runat="Server"> </asp:Content> <asp:Content ID="Content5" ContentPlaceHolderID="CopyrightContent" Runat="Server"> </asp:Content>
注意观察一下,在<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2"Title="Untitled Page" %>里多了一个MasterPageFile="~/MasterPage.master"项,这表明这个页面使用MasterPage.master
,该文件存放在与该页面相同的目录下(当有多个MasterPage文件时你也可以新建立一个目录方便管理)。记得刚才在MasterPage.master中的设置吗,我们定义了五个ContentPlaceHolder,ID分别是TopContent,LeftContent,CenterContent,RightContent,CopyrightContent,在Default2.aspx页面下的Content控件里,有一个属性就是ContentPlaceHolderID,该字段表明该Content控件中的内容代替ID指向的ContentPlaceHolder占位控件,这就是真的“霸主”了。这样一来,页面布局就使用MasterPage.master中的,而内容就使用Default2.aspx中Content控件下的,因此你在Default2.aspx 中找不到Html页面的基本格式标记,如<head>、<body>。看一下Design下Default2.aspx会是什么样子:
和MasterPage.master很像,但又不同,因为除了Content控件占用的地方是可以编辑的外其他地方都是不可以编辑的。
现在可以总结MasterPage的作用了,MasterPage其实是一种模板,它可以让你快速的建立相同页面布局而内部不同的网页,如果一个网站有多个MasterPage,那么新建aspx文件的时候就可以选择需要实现页面布局的MasterPage。另外,在你没有使用MasterPage之前,如果N个相同的页面布局需要改动成另外一个样式,那么你就要做很多无聊而又不得不做的工作,对N个页面进行一一更改,如果使用了MasterPage,你只要改动一个页面也就是MasterPage文件就可以了。还有,你是否发现你要要部署的web程序越来越大,使用MasterPage在一定程度上会减小web程序的大小,因为所有的重复的html标记都只有一个版本。
在CS 中也采用了MasterPage ,由于asp.net 1.1的框架并不提供MasterPage相关功能的组件,因此CS引用了MetaBuilders.WebControls.MasterPages.dll组件来支持该功能,整个实现过程是一样的。Asp.net 2.0中还对MetaBuilders.WebControls.MasterPages.dll进行了扩展,提供了更多的支持,如:可以给MasterPage文件提供一个*.cs文件,该文件继承了System.Web.UI.MasterPage。
最后看看高级的应用MasterPage,先往Default2.aspx中的Content1控件中加入一个红色的Panel控件,为的是标记该Content的位置,然后新建一个MasterPage2.master,该MasterPage与之前定义的一样,只把CopyrightContent与TopContent控件的位置对调一下。好了,先测试一下:
这个时候红色的块在顶部也就是MasterPage.master中定义的位置,再下来我们往Default2.aspx.cs中加入下面一段小代码:
public void Page_PreInit() { this.MasterPageFile= "~/MasterPage2.master"; }
在测试一下,你会看到如下的界面:
哈哈,红色的块到底部了,也就是MasterPage2.master中定义的,因为在MasterPage2.master中把CopyrightContent与TopContent对调了。到此,不知道各位是否找到了对MasterPage的感觉?是的,你不光可以静态的使用MasterPage,还能动态的使用,如根据不同的用户,或者根据不同的权限显示页面不同的布局风格。在MasterPage中实现一切都如此简单,其他的想象空间留给各位,感谢你的阅读,你的收获就是我的收获。