<asp:content id="content1" contentPlaceHolder="body" runat="server">
放置内容
</asp:content>
<asp:contentPlaceHolder id="body" runat="server">
以上是一个放置内容的容器
(1)调用母版中的方法及属性:在子页声明被调用页的信息,然后直接用master.XXXX()调用。
(2)调用母版中的控件:在子页中通过FindControl搜索母版页的id,调用之。
母版页.master:
<form id="form1" runat="server">
<asp:Label ID="masterLabel" runat="server" Text="hello,this is a master!"></asp:Label><br />
<div>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
母版页.aspx.cs(注意为public)
public void SayHello()
{
Response.Write("hello,everyone!I am a fresh chicken.");
}
首先呢,是调用母版方法(调用属性一样) :
子页中的.aspx首部加入如下代码:
<%@ MasterType VirtualPath="~/母版页.master" %>
子页则直接通过母版的方法名调用:
protected void Page_Load(object sender, EventArgs e)
{
Master.SayHello();
}
其次,调用母版中的控件(FindControl):
子页采用FindControl的方法(此处是通过按钮出发事件而将调用来的母版属性显示在Label中)
protected void btnGetMaster_Click(object sender, EventArgs e)
{
Label lbMaster = Master.FindControl("masterLabel") as Label;
if (lbMaster != null)
{
Label2.Text = lbMaster.Text.ToString();
}
}
其实,母版可以存在多个子版块的形式,FindControl也将变换为,事实上上面的程序也是这种的简写
Label lbMaster = Master.FindControl("ContentPlaceHolder1") .FindControl("Label1") as Label;
母版页和内容页的运行过程可以概括为以下5个步骤。
(1)用户通过键入内容页的URL来请求某页。
(2)获取内容页后,读取@ Page指令。如果该指令引用一个母版页,则也读取该母版页。如果是第一次请求这两个页,则两个页都要进行编译。
(3)母版页合并到内容页的控件树中。
(4)各个Content控件的内容合并到母版页中相应的ContentPlaceHolder控件中。
(5)呈现得到结果页。
母版页和内容页事件顺序
(1)母版页中控件Init事件;
(2)内容页中Content控件Init事件;
(3)母版页Init事件;
(4)内容页Init事件;
(5)内容页Load事件;
(6)母版页Load事件;
(7)内容页中Content控件Load事件;
(8)内容页PreRender事件;
(9)母版页PreRender事件;
(10)母版页控件PreRender事件。
(11)内容页中Content控件PreRender事件。
使用母版页的优点:
(1)有利于站点修改和维护,降低开发人员的工作强度
(2)有利于实现页面布局
(3)提供一种便于利用的对象模型