![ASP.NET从入门到精通(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/771/27111771/b_27111771.jpg)
5.5 访问母版页的控件和属性
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P135_23870.jpg?sign=1739326579-MMJLEn5O2gDKYeWKQZk8mtD2vY0wPiaM-0-1386397a146ced67dd12f28b285eda30)
视频讲解
对在内容页中引用母版页中的属性、方法和控件是有一定限制的。对于属性和方法的规则是:如果它们在母版页上被声明为公共成员,则可以引用它们,这包括公共属性和公共方法。在引用母版页上的控件时,没有只能引用公共成员的这种限制。
5.5.1 使用Master.FindControl()方法访问母版页上的控件
在内容页中,Page对象具有一个公共属性Master,该属性能够实现对相关母版页基类MasterPage的引用。母版页中的MasterPage相当于普通ASP.NET页面中的Page对象,因此,可以使用MasterPage对象实现对母版页中各个子对象的访问,但由于母版页中的控件是受保护的,不能直接访问,那么就必须使用MasterPage对象的FindControl方法实现。
【例5.2】访问母版页上的控件。(示例位置:mr\TM\05\02)
下面的示例主要通过使用FindControl方法,获取母版页中用于显示系统时间的Label控件。执行程序,示例运行结果如图5.7所示。
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P135_87061.jpg?sign=1739326579-DBixVV4SCIQuODoDkhf2LAedHjxgNE95-0-bcd1240c067f13f6e2b25f8d9a4829b9)
图5.7 嵌套母版页
程序实现的主要步骤如下。
(1)新建一个网站,首先添加一个母版页,默认名称为MasterPage.master,再添加一个Web窗体,命名为Default.aspx,作为母版页的内容页。
(2)分别在母版页和内容页上添加一个Label控件。母版页的Label控件的ID属性为labMaster,用来显示系统日期。内容页的Label控件的ID属性为labContent,用来显示母版页中的Label控件值。
(3)在MasterPage.master母版页的Page_Load事件中,使母版页的Label控件显示当前系统日期的代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87062.jpg?sign=1739326579-v11MTJr6eRyDNzan9QEilhmAUy9TfKmc-0-0a37081df1270c4a34eb55128af2c963)
(4)在Default.aspx内容页的Page_LoadComplete事件中,使内容页的Label控件显示母版页中的Label控件值的代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87063.jpg?sign=1739326579-dz1MHaPo5f0AeBdlrexIfkd2LtmhH9rO-0-281ac8037da1719812c366bc59070dfa)
注意
由于在母版页的Page_Load事件引发之前,内容页Page_Load事件已经引发,所以,此时从内容页访问母版页中的控件比较困难。所以,本示例使用ASP.NET 2.0(及以上版本)新增的Page_LoadComplete事件,利用FindControl()方法来获取母版页的控件,其中Page_LoadComplete事件是在生命周期内和网页加载结束时触发。当然还可以在Label控件的PreRender事件下完成此功能。
5.5.2 引用@MasterType指令访问母版页上的属性
引用母版页中的属性和方法,需要在内容页中使用MasterType指令,将内容页的Master属性强类型化,即通过MasterType指令创建与内容页相关的母版页的强类型引用。另外,在设置MasterType指令时,必须设置VirtualPath属性以便指定与内容页相关的母版页存储地址。
【例5.3】访问母版页上的属性。(示例位置:mr\TM\05\03)
下面的示例主要通过使用MasterType指令引用母版页的公共属性,并将Welcome字样赋给母版页的公共属性。执行程序,示例运行结果如图5.8所示。
程序实现的主要步骤如下。
(1)程序开发步骤参见例5.2。
(2)在母版页中定义了一个String类型的公共属性MValue,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87066.jpg?sign=1739326579-QZyRgckn2DpD1cxbUAOOo3ad3oH3RuW4-0-e3c82ccbdde85729cfe00aee3fb74df3)
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_24057.jpg?sign=1739326579-7WZqSDzHqFHCN8393CA5ZTNrxtW7XmWY-0-51a8ae9854de4d61a76953a4caae4957)
图5.8 访问母版页上的属性
并且通过<%= MValue %>显示在母版面中,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_87069.jpg?sign=1739326579-Ur3V5n8Fc2l8dxHm2EcfBUpsJOsFHWY7-0-2a7bf11a24a6311b57f57d5fef56a8db)
(3)在内容页代码头的设置中增加了<%@MasterType%>,并在其中设置了VirtualPath属性,用于设置被强类型化的母版页的URL地址。代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_87070.jpg?sign=1739326579-ec1CdMXd6yU8iXA39SVTFXh5soGMHcSw-0-181131df9fd0eb621f8f8a6db0f5036e)
(4)在内容页的Page_Load事件下,通过Master对象引用母版页中的公共属性,并将Welcome字样赋给母版页中的公共属性。代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P138_87073.jpg?sign=1739326579-CeBzhbvv6zTwjSMianfGehUx82VXH0wU-0-4e5525dd71b3994788771133a95bd42b)
说明
以上代码在内容页中的赋值,将影响母版页中公共属性的值。